[llvm] f473d4a - [ConstraintElimination] Support BBs with single successor in CanAdd.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 16 07:14:14 PDT 2022


Author: Florian Hahn
Date: 2022-03-16T14:13:52Z
New Revision: f473d4aa80ce72b372ed2ad760db8e8925e44ecb

URL: https://github.com/llvm/llvm-project/commit/f473d4aa80ce72b372ed2ad760db8e8925e44ecb
DIFF: https://github.com/llvm/llvm-project/commit/f473d4aa80ce72b372ed2ad760db8e8925e44ecb.diff

LOG: [ConstraintElimination] Support BBs with single successor in CanAdd.

If BB has a single successor, conditions can be added safely.

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
    llvm/test/Transforms/ConstraintElimination/assumes.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
index f7556bbe0ad93..733b83465a922 100644
--- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
@@ -419,6 +419,10 @@ static bool eliminateConstraints(Function &F, DominatorTree &DT) {
     // Succ (e.g. the case when adding a condition from a pre-header to a loop
     // header).
     auto CanAdd = [&BB, &DT](BasicBlock *Succ) {
+      if (BB.getSingleSuccessor()) {
+        assert(BB.getSingleSuccessor() == Succ);
+        return true;
+      }
       return any_of(successors(&BB),
                     [Succ](const BasicBlock *S) { return S != Succ; }) &&
              all_of(predecessors(Succ), [&BB, &DT, Succ](BasicBlock *Pred) {

diff  --git a/llvm/test/Transforms/ConstraintElimination/assumes.ll b/llvm/test/Transforms/ConstraintElimination/assumes.ll
index c27835a7a36db..b7e1d2491c404 100644
--- a/llvm/test/Transforms/ConstraintElimination/assumes.ll
+++ b/llvm/test/Transforms/ConstraintElimination/assumes.ll
@@ -164,7 +164,7 @@ define i1 @assume_does_not_dominates_successor_with_may_unwind_call_before_assum
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    [[C_2:%.*]] = icmp eq i16 [[A]], 0
-; CHECK-NEXT:    ret i1 [[C_2]]
+; CHECK-NEXT:    ret i1 true
 ;
 entry:
   br i1 %i.0, label %exit, label %if.then
@@ -189,7 +189,7 @@ define i1 @assume_dominates_successor_with_may_unwind_call_before_assume_uncond_
 ; CHECK-NEXT:    br label [[EXIT:%.*]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    [[C_2:%.*]] = icmp eq i16 [[A]], 0
-; CHECK-NEXT:    ret i1 [[C_2]]
+; CHECK-NEXT:    ret i1 true
 ;
 entry:
   call void @may_unwind()


        


More information about the llvm-commits mailing list