Hi I am a beginner and I am struggling to understand the following error:
ukernel.mlir:25:5: error: failed to legalize operation 'builtin.unrealized_conversion_cast' that was explicitly marked illegal
%cmem: memref<1xvector<12x32xf32>>
^
ukernel.mlir:25:5: note: see current operation: %20 = "builtin.unrealized_conversion_cast"(%19) : (!llvm.struct<(ptr<array<12 x vector<32xf32>>>, ptr<array<12 x vector<32xf32>>>, i64, array<1 x i64>, array<1 x i64>)>) -> memref<1xvector<12x32xf32>>
The error comes from the following code snippet:
func.func @vec_op_acc(
%amem: memref<256xvector<12xf32>>, %bmem: memref<256xvector<32xf32>>,
%cmem: memref<1xvector<12x32xf32>>
)
{
%i0 = arith.constant 0 : index
affine.for %k = 0 to 256 {
%a = vector.load %amem[%k] : memref<256xvector<12xf32>>, vector<12xf32>
%b = vector.load %bmem[%k] : memref<256xvector<32xf32>>, vector<32xf32>
%c = vector.load %cmem[%i0] : memref<1xvector<12x32xf32>>, vector<12x32xf32>
%res = vector.outerproduct %a, %b, %c : vector<12xf32>, vector<32xf32>
vector.store %res, %cmem[%i0] : memref<1xvector<12x32xf32>>, vector<12x32xf32>
}
return
}
I am using mlir-opt -pass-pipeline="convert-vector-to-llvm,convert-memref-to-llvm,convert-func-to-llvm,reconcile-unrealized-casts" ukernel.mlir > lowered/ukernel.lowered.mlir
to lower the snippet to llvm MLIR.
Any insight would be greatly appreciated.
Thank you and apologies if this is a dumb question!