Issue |
120676
|
Summary |
The memref dialect cannot be converted to the emitc dialect
|
Labels |
new issue
|
Assignees |
|
Reporter |
pyl3000
|
When I use` mlir-opt .\matmul-emitc2.mlir --convert-memref-to-emitc -o matmul-emitc3.mlir` to drop the memref dialect to the emitc dialect with the error:

Input mlir as follow:
```
module {
func.func @main() {
%0 = "emitc.constant"() <{value = 0.000000e+00 : f64}> : () -> f64
%1 = "emitc.constant"() <{value = 6.000000e+00 : f64}> : () -> f64
%2 = "emitc.constant"() <{value = 5.000000e+00 : f64}> : () -> f64
%3 = "emitc.constant"() <{value = 4.000000e+00 : f64}> : () -> f64
%4 = "emitc.constant"() <{value = 3.000000e+00 : f64}> : () -> f64
%5 = "emitc.constant"() <{value = 2.000000e+00 : f64}> : () -> f64
%6 = "emitc.constant"() <{value = 1.000000e+00 : f64}> : () -> f64
%alloc = memref.alloc() : memref<2x2xf64>
%alloc_0 = memref.alloc() : memref<2x3xf64>
%7 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%8 = builtin.unrealized_conversion_cast %7 : !emitc.size_t to index
%9 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%10 = builtin.unrealized_conversion_cast %9 : !emitc.size_t to index
memref.store %6, %alloc_0[%8, %10] : memref<2x3xf64>
%11 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%12 = builtin.unrealized_conversion_cast %11 : !emitc.size_t to index
%13 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%14 = builtin.unrealized_conversion_cast %13 : !emitc.size_t to index
memref.store %5, %alloc_0[%12, %14] : memref<2x3xf64>
%15 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%16 = builtin.unrealized_conversion_cast %15 : !emitc.size_t to index
%17 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%18 = builtin.unrealized_conversion_cast %17 : !emitc.size_t to index
memref.store %4, %alloc_0[%16, %18] : memref<2x3xf64>
%19 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%20 = builtin.unrealized_conversion_cast %19 : !emitc.size_t to index
%21 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%22 = builtin.unrealized_conversion_cast %21 : !emitc.size_t to index
memref.store %3, %alloc_0[%20, %22] : memref<2x3xf64>
%23 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%24 = builtin.unrealized_conversion_cast %23 : !emitc.size_t to index
%25 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%26 = builtin.unrealized_conversion_cast %25 : !emitc.size_t to index
memref.store %2, %alloc_0[%24, %26] : memref<2x3xf64>
%27 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%28 = builtin.unrealized_conversion_cast %27 : !emitc.size_t to index
%29 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%30 = builtin.unrealized_conversion_cast %29 : !emitc.size_t to index
memref.store %1, %alloc_0[%28, %30] : memref<2x3xf64>
%31 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%32 = builtin.unrealized_conversion_cast %31 : !emitc.size_t to index
%33 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%34 = builtin.unrealized_conversion_cast %33 : !emitc.size_t to index
%35 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%36 = builtin.unrealized_conversion_cast %35 : !emitc.size_t to index
emitc.for %arg0 = %32 to %34 step %36 {
%37 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%38 = builtin.unrealized_conversion_cast %37 : !emitc.size_t to index
%39 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%40 = builtin.unrealized_conversion_cast %39 : !emitc.size_t to index
%41 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%42 = builtin.unrealized_conversion_cast %41 : !emitc.size_t to index
emitc.for %arg1 = %38 to %40 step %42 {
memref.store %0, %alloc[%arg1, %arg0] : memref<2x2xf64>
%43 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%44 = builtin.unrealized_conversion_cast %43 : !emitc.size_t to index
%45 = "emitc.constant"() <{value = 3 : index}> : () -> !emitc.size_t
%46 = builtin.unrealized_conversion_cast %45 : !emitc.size_t to index
%47 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%48 = builtin.unrealized_conversion_cast %47 : !emitc.size_t to index
emitc.for %arg2 = %44 to %46 step %48 {
%49 = memref.load %alloc_0[%arg0, %arg2] : memref<2x3xf64>
%50 = memref.load %alloc_0[%arg1, %arg2] : memref<2x3xf64>
%51 = memref.load %alloc[%arg1, %arg0] : memref<2x2xf64>
%52 = emitc.mul %50, %49 : (f64, f64) -> f64
%53 = emitc.add %51, %52 : (f64, f64) -> f64
memref.store %53, %alloc[%arg1, %arg0] : memref<2x2xf64>
}
}
}
memref.dealloc %alloc_0 : memref<2x3xf64>
memref.dealloc %alloc : memref<2x2xf64>
return
}
}
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs