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()