Issue 83252
Summary [MLIR] transform.structured.convert_to_loops does not delete target op
Labels mlir
Assignees
Reporter lhunloh
    Minimal example:
```
func.func @gemm(%arg0 : memref<?x?xf32>, %arg1 : memref<?x?xf32>,
  %arg2 : memref<?x?xf32>) {
  linalg.matmul ins(%arg0, %arg1 : memref<?x?xf32>, memref<?x?xf32>)
      outs(%arg2 : memref<?x?xf32>)
  return
}

module attributes {transform.with_named_sequence} {
  transform.named_sequence @__transform_main(%arg1 : !transform.any_op {transform.readonly}) {
 %matmul = transform.structured.match ops{["linalg.matmul"]} in %arg1
 : (!transform.any_op) -> !transform.any_op
 transform.structured.convert_to_loops %matmul : !transform.any_op
 transform.yield
  }
}
```

Via `mlir-opt test.mlir --transform-interpreter` this gets transformed into:
```
func.func @gemm(%arg0: memref<?x?xf32>, %arg1: memref<?x?xf32>, %arg2: memref<?x?xf32>) {
   // constants abbreviated
    scf.for %arg3 = %c0_9 to %dim step %c1_10 {
      // constants abbreviated
      scf.for %arg4 = %c0_11 to %dim_4 step %c1_12 {
        // constants abbreviated
        scf.for %arg5 = %c0_13 to %dim_0 step %c1_14 {
         // constants abbreviated
          %9 = arith.mulf %2, %5 : f32
          %10 = arith.addf %8, %9 : f32
          %11 = affine.apply #map(%arg3, %arg4, %arg5)
          %12 = affine.apply #map2(%arg3, %arg4, %arg5)
 memref.store %10, %arg2[%11, %12] : memref<?x?xf32>
        }
 }
    }
    linalg.matmul ins(%arg0, %arg1 : memref<?x?xf32>, memref<?x?xf32>) outs(%arg2 : memref<?x?xf32>)
 return
}
```

With the (old) target `linalg.matmul` still standing.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to