Open
Description
Hi, I’m facing an issue with the following code. After applying the —canonicalize
option, the main function body becomes empty, eliminating all its operations.
You can view the code and reproduction steps in Compiler Explorer: https://godbolt.org/z/s5oKx48Kq
module {
func.func @main() {
%c8_i32 = arith.constant 8 : i32
%c1_i32 = arith.constant 1 : i32
%0 = arith.muli %c1_i32, %c8_i32 : i32
%alloc = memref.alloc() : memref<64xf32>
%alloc_0 = memref.alloc() : memref<64xf32>
affine.for %arg0 = 0 to 64 {
%1 = arith.index_cast %arg0 : index to i32
%2 = arith.divui %1, %c1_i32 : i32
%3 = arith.divui %2, %0 : i32
%4 = arith.remui %2, %0 : i32
%5 = arith.divui %4, %c1_i32 : i32
%c0_i32 = arith.constant 0 : i32
%6 = arith.muli %c1_i32, %3 : i32
%7 = arith.muli %c1_i32, %5 : i32
%8 = arith.addi %c0_i32, %6 : i32
%9 = arith.addi %c0_i32, %7 : i32
%10 = arith.muli %8, %0 : i32
%11 = arith.addi %c0_i32, %10 : i32
%12 = arith.muli %9, %c1_i32 : i32
%13 = arith.addi %11, %12 : i32
%14 = arith.muli %13, %c1_i32 : i32
%15 = arith.addi %c0_i32, %14 : i32
%16 = arith.index_cast %15 : i32 to index
%17 = memref.load %alloc_0[%16] : memref<64xf32>
%18 = arith.muli %9, %0 : i32
%19 = arith.addi %c0_i32, %18 : i32
%20 = arith.muli %8, %c1_i32 : i32
%21 = arith.addi %19, %20 : i32
%22 = arith.muli %21, %c1_i32 : i32
%23 = arith.addi %c0_i32, %22 : i32
%24 = arith.index_cast %23 : i32 to index
memref.store %17, %alloc[%24] : memref<64xf32>
}
memref.dealloc %alloc : memref<64xf32>
memref.dealloc %alloc_0 : memref<64xf32>
return
}
}
Calling the --canonicalize
module {
func.func @main() {
return
}
}