Skip to content

Commit 6496869

Browse files
[CGP] Fix matching of uadd overflow
This patch fixes the issue where uadd overflow intrinsic is matched for: `Add = add A,(uint64_t)-1; Cmp = icmp ne A, 0` instead of: `Add = add A,-1; Cmp = icmp ne A, 0` where -1 is represented in 256 bits. Signed-off-by: Vladimir Radosavljevic <[email protected]>
1 parent de416e1 commit 6496869

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

llvm/lib/CodeGen/CodeGenPrepare.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1584,7 +1584,7 @@ static bool matchUAddWithOverflowConstantEdgeCases(CmpInst *Cmp,
15841584
if (Pred == ICmpInst::ICMP_EQ && match(B, m_AllOnes()))
15851585
B = ConstantInt::get(B->getType(), 1);
15861586
else if (Pred == ICmpInst::ICMP_NE && match(B, m_ZeroInt()))
1587-
B = ConstantInt::get(B->getType(), -1);
1587+
B = ConstantInt::get(B->getType(), -1, true);
15881588
else
15891589
return false;
15901590

llvm/test/CodeGen/EraVM/cgp-uadd-overflow-wrong-match.ll

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@ define i256 @dont_match(i256 %a) {
99
; CHECK: ; %bb.0: ; %entry
1010
; CHECK-NEXT: add r1, r0, r2
1111
; CHECK-NEXT: add @CPI0_0[0], r2, r1
12-
; CHECK-NEXT: add! @CPI0_0[0], r2, r2
13-
; CHECK-NEXT: jump.lt @.BB0_2
12+
; CHECK-NEXT: sub! r2, r0, r2
13+
; CHECK-NEXT: add.ne r0, r0, r1
1414
; CHECK-NEXT: ; %bb.1: ; %else
1515
; CHECK-NEXT: ret
16-
; CHECK-NEXT: .BB0_2: ; %then
17-
; CHECK-NEXT: add r0, r0, r1
18-
; CHECK-NEXT: ret
1916
entry:
2017
%add = add i256 %a, 18446744073709551615
2118
%cmp = icmp ne i256 %a, 0
@@ -31,9 +28,13 @@ else:
3128
define i256 @match(i256 %a) {
3229
; CHECK-LABEL: match:
3330
; CHECK: ; %bb.0: ; %entry
34-
; CHECK-NEXT: sub! r1, r0, r2
35-
; CHECK-NEXT: sub.s.eq 1, r1, r1
36-
; CHECK-NEXT: add.ne r0, r0, r1
31+
; CHECK-NEXT: add! @CPI1_0[0], r1, r2
32+
; CHECK-NEXT: jump.lt @.BB1_2
33+
; CHECK-NEXT: ; %bb.1: ; %else
34+
; CHECK-NEXT: sub.s 1, r1, r1
35+
; CHECK-NEXT: ret
36+
; CHECK-NEXT: .BB1_2: ; %then
37+
; CHECK-NEXT: add r0, r0, r1
3738
; CHECK-NEXT: ret
3839
entry:
3940
%add = add i256 %a, -1

0 commit comments

Comments
 (0)