Skip to content

Commit c9e4418

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. PR: #626 Signed-off-by: Vladimir Radosavljevic <[email protected]>
1 parent 20de053 commit c9e4418

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

llvm/lib/CodeGen/CodeGenPrepare.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1584,7 +1584,9 @@ 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+
// EraVM local begin
1588+
B = ConstantInt::get(B->getType(), -1, true);
1589+
// EraVM local end
15881590
else
15891591
return false;
15901592

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

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

0 commit comments

Comments
 (0)