Issue 180029
Summary [MLIR][AFFINE] mlir-opt affine-loop-fusion `sliceIterationCount > 0' failed
Labels mlir
Assignees
Reporter naskap
    LLVM version 21.1.8
Hash: 2078da43e25a4623cab

getFusionComputeCost fails with assertion failure: sliceIterationCount > 0 failed

Command: `mlir-opt --affine-loop-fusion testfile.mlir`

Test File:
```
module {

 func.func @foo(%arg0: memref<1024x4096xf32>, %arg1: memref<8192x4096xf32>) -> memref<1024x8192xf32> {
    %cst_0 = arith.constant 1.000000e+00 : f32
 %alloc = memref.alloc() : memref<1024x8192xf32>
    affine.for %arg2 = 0 to 16 {
        affine.for %arg4 = 0 to 512 {
          affine.for %arg5 = 0 to 64 {
            affine.for %arg6 = 0 to 16 {
              affine.for %arg7 = 0 to 2048 {
                %0 = affine.load %arg0[%arg5 + %arg2 * 64, %arg7] : memref<1024x4096xf32>
                %1 = affine.load %arg1[%arg6 + %arg4 * 16, %arg7] : memref<8192x4096xf32>
                %2 = affine.load %alloc[%arg5 + %arg2 * 64, %arg6 + %arg4 * 16] : memref<1024x8192xf32>
                %3 = arith.mulf %0, %1 : f32
 %4 = arith.addf %2, %3 : f32
                affine.store %4, %alloc[%arg5 + %arg2 * 64, %arg6 + %arg4 * 16] : memref<1024x8192xf32>
 }
            }
          }
        }

        affine.for %arg4 = 0 to 512 {
          affine.for %arg5 = 0 to 64 {
            affine.for %arg6 = 0 to 16 {
              affine.for %arg7 = 0 to 2048 {
 %0 = affine.load %arg0[%arg5 + %arg2 * 64, %arg7 + 2048] : memref<1024x4096xf32>
                %1 = affine.load %arg1[%arg6 + %arg4 * 16, %arg7 + 2048] : memref<8192x4096xf32>
                %2 = affine.load %alloc[%arg5 + %arg2 * 64, %arg6 + %arg4 * 16] : memref<1024x8192xf32>
 %3 = arith.mulf %0, %1 : f32
                %4 = arith.addf %2, %3 : f32
                affine.store %4, %alloc[%arg5 + %arg2 * 64, %arg6 + %arg4 * 16] : memref<1024x8192xf32>
              }
            }
 }
        }
      
    }
    affine.for %arg2 = 0 to 16 {
 affine.for %arg3 = 0 to 512 {
        affine.for %arg4 = 0 to 64 {
 affine.for %arg5 = 0 to 16 {
            %0 = affine.load %alloc[%arg4 + %arg2 * 64, %arg5 + %arg3 * 16] : memref<1024x8192xf32>
 affine.store %0, %alloc[%arg4 + %arg2 * 64, %arg5 + %arg3 * 16] : memref<1024x8192xf32>
          }
        }
      }
    }
    return %alloc : memref<1024x8192xf32>
  }
}
```
I found it was hard to minimize this example much more and keep the failure. 

[stack_dump.txt](https://github.com/user-attachments/files/25111339/stack_dump.txt)
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to