047、从Tensor到MemRef的Bufferization过程

047、从Tensor到MemRef的Bufferization过程 047、从Tensor到MemRef的Bufferization过程一次深夜的崩溃凌晨两点,我盯着屏幕上的一行错误输出发呆:error: 'memref.alloc' op operand type mismatch: expected 'index' but got 'tensor10xf32'这已经是本周第三次在Bufferization阶段翻车了。MLIR的Tensor类型明明写得好好的,一到生成MemRef就各种类型错乱。当时我还在想,不就是把Tensor变成带缓冲区的MemRef吗?怎么这么难搞。后来翻了两天的MLIR源码和Dialect转换逻辑,才明白——Bufferization根本不是简单的“类型替换”,而是一整套内存管理策略的重新建模。今天这篇笔记,就把我踩过的坑和梳理出的核心逻辑写清楚。Tensor和MemRef到底差在哪先看一个最简单的例子。假设我们有一个计算图:%0 = tensor.empty() : tensor10xf32 %1 = linalg.fill ins(%cst : f32) outs(%0 : tensor10xf32) - tensor10xf32 %2 = linalg.add ins(%1, %1 : tensor