[Mlir-commits] [mlir] 861600f - [mlir][SparseTensor] Fix invalid IR in `ForallRewriter` pattern (#74547)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Dec 6 15:47:24 PST 2023
Author: Matthias Springer
Date: 2023-12-07T08:47:20+09:00
New Revision: 861600f1751b1a7e84cd99dd79361569542e9c1a
URL: https://github.com/llvm/llvm-project/commit/861600f1751b1a7e84cd99dd79361569542e9c1a
DIFF: https://github.com/llvm/llvm-project/commit/861600f1751b1a7e84cd99dd79361569542e9c1a.diff
LOG: [mlir][SparseTensor] Fix invalid IR in `ForallRewriter` pattern (#74547)
The `ForallRewriter` pattern used to generate invalid IR:
```
mlir/test/Dialect/SparseTensor/GPU/gpu_combi.mlir:0:0: error: 'scf.for' op expects region #0 to have 0 or 1 blocks
mlir/test/Dialect/SparseTensor/GPU/gpu_combi.mlir:0:0: note: see current operation:
"scf.for"(%8, %2, %9) ({
^bb0(%arg5: index):
// ...
"scf.yield"() : () -> ()
^bb1(%10: index): // no predecessors
"scf.yield"() : () -> ()
}) : (index, index, index) -> ()
```
This commit fixes tests such as
`mlir/test/Dialect/SparseTensor/GPU/gpu_combi.mlir` when verifying the
IR after each pattern application (#74270).
Added:
Modified:
mlir/lib/Dialect/SparseTensor/Transforms/SparseGPUCodegen.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/SparseGPUCodegen.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/SparseGPUCodegen.cpp
index 927fc71f84a85..5155cab772d44 100644
--- a/mlir/lib/Dialect/SparseTensor/Transforms/SparseGPUCodegen.cpp
+++ b/mlir/lib/Dialect/SparseTensor/Transforms/SparseGPUCodegen.cpp
@@ -309,6 +309,10 @@ static void genGPUCode(PatternRewriter &rewriter, gpu::GPUFuncOp gpuFunc,
// }
Value upper = irMap.lookup(forallOp.getUpperBound()[0]);
scf::ForOp forOp = rewriter.create<scf::ForOp>(loc, row, upper, inc);
+ // The scf.for builder creates an empty block. scf.for does not allow multiple
+ // blocks in its region, so delete the block before `cloneRegionBefore` adds
+ // an additional block.
+ rewriter.eraseBlock(forOp.getBody());
rewriter.cloneRegionBefore(forallOp.getRegion(), forOp.getRegion(),
forOp.getRegion().begin(), irMap);
More information about the Mlir-commits
mailing list