[ConstraintElimination] Support BBs with single successor in CanAdd.

If BB has a single successor, conditions can be added safely.
This commit is contained in:
Florian Hahn 2022-03-16 14:13:00 +00:00
parent c076fa1c44
commit f473d4aa80
No known key found for this signature in database
GPG Key ID: CF59919C6547A668
2 changed files with 6 additions and 2 deletions

View File

@ -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) {

View File

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