我想在 MLIR 中将
tensor
转换为 memref
,我使用 memref.tensor_store
来执行此操作。
代码:
func.func @main() {
%A = arith.constant dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]> : tensor<2x3xf32>
outs(%C: tensor<2x4xf32>) -> tensor<2x4xf32>
%O = memref.alloc() : memref<2x3xf32>
memref.tensor_store %A, %O : memref<2x3xf32>
return
}
命令行是
bin/mlir-opt test.mlir -test-transform-dialect-erase-schedule -linalg-bufferize -arith-bufferize -tensor-bufferize -func-bufferize -finalizing-bufferize -buffer-deallocation -convert-linalg-to-loops -convert-scf-to-cf -convert-linalg-to-llvm -expand-strided-metadata -lower-affine -convert-arith-to-llvm -convert-scf-to-cf --finalize-memref-to-llvm -convert-func-to-llvm -reconcile-unrealized-casts | \ bin/mlir-cpu-runner -e main -entry-point-result=void
,我收到错误failed to legalize operation 'memref.tensor_store'
。我不知道如何修复它,或者是否有其他方法将 tensor
转换为 memref
类型。
我尝试寻找其他方法来转换类型,但没有成功。
MLIR 中的缓冲很烦人。你能试试这个吗: https://mlir.llvm.org/docs/Bufferization/#what-is-one-shot-bufferize