aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Springer <me@m-sp.org>2023-12-06 15:14:29 +0900
committerGitHub <noreply@github.com>2023-12-06 15:14:29 +0900
commitdf7545e4be5cb65ef3ddd278119c0b8b2f37b0ec (patch)
tree36fae94f6445ebb7dc4f7a069579a6f68864e155
parenta8d5f731d6696edcdbb6f71f8d58ca23962f5d9f (diff)
downloadllvm-df7545e4be5cb65ef3ddd278119c0b8b2f37b0ec.zip
llvm-df7545e4be5cb65ef3ddd278119c0b8b2f37b0ec.tar.gz
llvm-df7545e4be5cb65ef3ddd278119c0b8b2f37b0ec.tar.bz2
[mlir][SCF] Fix invalid IR in `ParallelOpSingleOrZeroIterationDimsFolder` pattern (#74552)
`ParallelOpSingleOrZeroIterationDimsFolder` used to produce invalid IR: ``` within split at mlir/test/Dialect/SCF/canonicalize.mlir:1 offset :11:3: error: 'scf.parallel' op expects region #0 to have 0 or 1 blocks scf.parallel (%i0, %i1, %i2) = (%c0, %c3, %c7) to (%c1, %c6, %c10) step (%c1, %c2, %c3) { ^ within split at mlir/test/Dialect/SCF/canonicalize.mlir:1 offset :11:3: note: see current operation: "scf.parallel"(%4, %5, %3) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>}> ({ ^bb0(%arg1: index): "memref.store"(%0, %arg0, %1, %arg1, %6) : (i32, memref<?x?x?xi32>, index, index, index) -> () "scf.yield"() : () -> () ^bb1(%8: index): // no predecessors "scf.yield"() : () -> () }) : (index, index, index) -> () ``` Together with #74551, this commit fixes `mlir/test/Dialect/SCF/canonicalize.mlir` when verifying the IR after each pattern application (#74270).
-rw-r--r--mlir/lib/Dialect/SCF/IR/SCF.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/mlir/lib/Dialect/SCF/IR/SCF.cpp b/mlir/lib/Dialect/SCF/IR/SCF.cpp
index 3b55704..2e738216 100644
--- a/mlir/lib/Dialect/SCF/IR/SCF.cpp
+++ b/mlir/lib/Dialect/SCF/IR/SCF.cpp
@@ -3040,6 +3040,8 @@ struct ParallelOpSingleOrZeroIterationDimsFolder
auto newOp =
rewriter.create<ParallelOp>(op.getLoc(), newLowerBounds, newUpperBounds,
newSteps, op.getInitVals(), nullptr);
+ // Erase the empty block that was inserted by the builder.
+ rewriter.eraseBlock(newOp.getBody());
// Clone the loop body and remap the block arguments of the collapsed loops
// (inlining does not support a cancellable block argument mapping).
rewriter.cloneRegionBefore(op.getRegion(), newOp.getRegion(),