如何在 MLIR 中将张量转换为 memref

问题描述 投票:0回答:1

我想在 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
类型。

我尝试寻找其他方法来转换类型,但没有成功。

llvm llvm-ir
1个回答
0
投票

MLIR 中的缓冲很烦人。你能试试这个吗: https://mlir.llvm.org/docs/Bufferization/#what-is-one-shot-bufferize

© www.soinside.com 2019 - 2024. All rights reserved.