Skip to content

Commit bb4ad14

Browse files
committed
[ConstraintElim] Drop invalid rows instead of failing the elimination
1 parent a085402 commit bb4ad14

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

llvm/lib/Analysis/ConstraintSystem.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,19 @@ bool ConstraintSystem::eliminateUsingFM() {
9595
IdxUpper++;
9696
}
9797

98-
if (MulOverflow(UpperV, -1 * LowerLast, M1))
99-
return false;
98+
if (MulOverflow(UpperV, -1 * LowerLast, M1)) {
99+
NR.clear();
100+
break;
101+
}
100102
if (IdxLower < LowerRow.size() && LowerRow[IdxLower].Id == CurrentId) {
101103
LowerV = LowerRow[IdxLower].Coefficient;
102104
IdxLower++;
103105
}
104106

105-
if (MulOverflow(LowerV, UpperLast, M2))
106-
return false;
107-
if (AddOverflow(M1, M2, N))
108-
return false;
107+
if (MulOverflow(LowerV, UpperLast, M2) || AddOverflow(M1, M2, N)) {
108+
NR.clear();
109+
break;
110+
}
109111
if (N == 0)
110112
continue;
111113
NR.emplace_back(N, CurrentId);

llvm/test/Transforms/ConstraintElimination/constraint-overflow.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ define i32 @f(i64 %a3, i64 %numElements) {
1313
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[A1]], [[A3]]
1414
; CHECK-NEXT: br i1 [[CMP]], label [[IF_END_I:%.*]], label [[ABORT:%.*]]
1515
; CHECK: if.end.i:
16-
; CHECK-NEXT: [[CMP2_NOT_I:%.*]] = icmp ult i64 [[A1]], [[A3]]
17-
; CHECK-NEXT: br i1 [[CMP2_NOT_I]], label [[ABORT]], label [[EXIT:%.*]]
16+
; CHECK-NEXT: br i1 false, label [[ABORT]], label [[EXIT:%.*]]
1817
; CHECK: abort:
1918
; CHECK-NEXT: ret i32 -1
2019
; CHECK: exit:

0 commit comments

Comments
 (0)