Skip to content

Commit 250a167

Browse files
committed
[InstSimplify] avoid crashing by trying to rem-by-zero
Bug was noted in the post-commit comments for: rGe8760bb9a8a3
1 parent ba37b14 commit 250a167

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

llvm/lib/Analysis/InstructionSimplify.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2755,9 +2755,9 @@ static Value *simplifyICmpWithConstant(CmpInst::Predicate Pred, Value *LHS,
27552755
const APInt *MulC;
27562756
if (ICmpInst::isEquality(Pred) &&
27572757
((match(LHS, m_NUWMul(m_Value(), m_APIntAllowUndef(MulC))) &&
2758-
C->urem(*MulC) != 0) ||
2758+
*MulC != 0 && C->urem(*MulC) != 0) ||
27592759
(match(LHS, m_NSWMul(m_Value(), m_APIntAllowUndef(MulC))) &&
2760-
C->srem(*MulC) != 0)))
2760+
*MulC != 0 && C->srem(*MulC) != 0)))
27612761
return ConstantInt::get(ITy, Pred == ICmpInst::ICMP_NE);
27622762

27632763
return nullptr;

llvm/test/Transforms/InstSimplify/icmp-constant.ll

+42
Original file line numberDiff line numberDiff line change
@@ -1023,3 +1023,45 @@ define i1 @mul_nsw_srem_cmp_neg_constant_is_0(i8 %x) {
10231023
%r = icmp eq i8 %m, -84
10241024
ret i1 %r
10251025
}
1026+
1027+
; Don't crash trying to div/rem-by-zero.
1028+
1029+
define i1 @mul_nsw_by_zero(i8 %x) {
1030+
; CHECK-LABEL: @mul_nsw_by_zero(
1031+
; CHECK-NEXT: bb1:
1032+
; CHECK-NEXT: br label [[BB3:%.*]]
1033+
; CHECK: bb2:
1034+
; CHECK-NEXT: ret i1 false
1035+
; CHECK: bb3:
1036+
; CHECK-NEXT: br label [[BB2:%.*]]
1037+
;
1038+
bb1:
1039+
br label %bb3
1040+
bb2:
1041+
%r = icmp eq i8 %m, 45
1042+
ret i1 %r
1043+
bb3:
1044+
%m = mul nsw i8 %x, 0
1045+
br label %bb2
1046+
}
1047+
1048+
; Don't crash trying to div/rem-by-zero.
1049+
1050+
define i1 @mul_nuw_by_zero(i8 %x) {
1051+
; CHECK-LABEL: @mul_nuw_by_zero(
1052+
; CHECK-NEXT: bb1:
1053+
; CHECK-NEXT: br label [[BB3:%.*]]
1054+
; CHECK: bb2:
1055+
; CHECK-NEXT: ret i1 false
1056+
; CHECK: bb3:
1057+
; CHECK-NEXT: br label [[BB2:%.*]]
1058+
;
1059+
bb1:
1060+
br label %bb3
1061+
bb2:
1062+
%r = icmp eq i8 %m, 45
1063+
ret i1 %r
1064+
bb3:
1065+
%m = mul nuw i8 %x, 0
1066+
br label %bb2
1067+
}

0 commit comments

Comments
 (0)