[Mlir-commits] [mlir] 5aa741d - [mlir][SPIRVToLLVM] Erase empty `spirv.mlir.loop` in `LoopPattern` (#113527)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Oct 25 20:23:00 PDT 2024
Author: Longsheng Mou
Date: 2024-10-26T11:22:57+08:00
New Revision: 5aa741d7ca21645572103d798d0b121f1a741a35
URL: https://github.com/llvm/llvm-project/commit/5aa741d7ca21645572103d798d0b121f1a741a35
DIFF: https://github.com/llvm/llvm-project/commit/5aa741d7ca21645572103d798d0b121f1a741a35.diff
LOG: [mlir][SPIRVToLLVM] Erase empty `spirv.mlir.loop` in `LoopPattern` (#113527)
This PR erases `spirv.mlir.loop` with an empty region in `LoopPattern`,
resolving a crash. Fixes #113404.
Added:
Modified:
mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
mlir/test/Conversion/SPIRVToLLVM/control-flow-ops-to-llvm.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
index f28473a108e1b5..87c0936cee229e 100644
--- a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
+++ b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
@@ -1148,6 +1148,12 @@ class LoopPattern : public SPIRVToLLVMConversion<spirv::LoopOp> {
if (loopOp.getLoopControl() != spirv::LoopControl::None)
return failure();
+ // `spirv.mlir.loop` with empty region is redundant and should be erased.
+ if (loopOp.getBody().empty()) {
+ rewriter.eraseOp(loopOp);
+ return success();
+ }
+
Location loc = loopOp.getLoc();
// Split the current block after `spirv.mlir.loop`. The remaining ops will
diff --git a/mlir/test/Conversion/SPIRVToLLVM/control-flow-ops-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/control-flow-ops-to-llvm.mlir
index 3557830e779e24..756fc5415e20f7 100644
--- a/mlir/test/Conversion/SPIRVToLLVM/control-flow-ops-to-llvm.mlir
+++ b/mlir/test/Conversion/SPIRVToLLVM/control-flow-ops-to-llvm.mlir
@@ -86,6 +86,14 @@ spirv.module Logical GLSL450 {
//===----------------------------------------------------------------------===//
spirv.module Logical GLSL450 {
+ // CHECK-LABEL: @empty_loop
+ spirv.func @empty_loop() "None" {
+ // CHECK: llvm.return
+ spirv.mlir.loop {
+ }
+ spirv.Return
+ }
+
// CHECK-LABEL: @infinite_loop
spirv.func @infinite_loop(%count : i32) -> () "None" {
// CHECK: llvm.br ^[[BB1:.*]]
More information about the Mlir-commits
mailing list