[Mlir-commits] [mlir] [MLIR][CF] Avoid collapsing blocks which participate in cycles (PR #160783)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Sun Sep 28 18:22:44 PDT 2025
================
@@ -122,6 +122,18 @@ static LogicalResult collapseBranch(Block *&successor,
Block *successorDest = successorBranch.getDest();
if (successorDest == successor)
return failure();
+ // Don't try to collapse branches which participate in a cycle.
+ BranchOp nextBranch = dyn_cast<BranchOp>(successorDest->getTerminator());
+ llvm::DenseSet<Block *> visited{successorDest};
+ while (nextBranch) {
+ Block *nextBranchDest = nextBranch.getDest();
+ if (nextBranchDest == successor)
+ return failure();
+ else if (visited.contains(nextBranchDest))
+ break;
----------------
benwu25 wrote:
BTW, we would need to update the `flang` test to check for this cycle instead of what it currently checks. Not a large change.
```
! CHECK-LABEL: func.func @_QPsb
! CHECK: omp.parallel
! CHECK: cf.cond_br %{{[0-9]+}}, ^bb1, ^bb2
! CHECK-NEXT: ^bb1:
! CHECK: cf.br ^bb2
! CHECK-NEXT: ^bb2:
! CHECK-NEXT: cf.br ^bb3
! CHECK-NEXT: ^bb3:
! CHECK-NEXT: cf.br ^bb3
! CHECK-NEXT: }
```
https://github.com/llvm/llvm-project/pull/160783
More information about the Mlir-commits
mailing list