Skip to content

Commit 25b4315

Browse files
[CGP] Add pre-commit test for Fix matching of uadd overflow
Add tests 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 72ae8fe commit 25b4315

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2+
; RUN: opt -codegenprepare --cgp-verify-bfi-updates=false -S < %s | FileCheck %s
3+
; Verification of BFI updates is disabled because of https://github.com/llvm/llvm-project/issues/64197
4+
5+
target datalayout = "E-p:256:256-i256:256:256-S32-a:256:256"
6+
target triple = "eravm"
7+
8+
define i256 @dont_match(i256 %a) {
9+
; CHECK-LABEL: define i256 @dont_match
10+
; CHECK-SAME: (i256 [[A:%.*]]) {
11+
; CHECK-NEXT: entry:
12+
; CHECK-NEXT: [[TMP0:%.*]] = call { i256, i1 } @llvm.uadd.with.overflow.i256(i256 [[A]], i256 18446744073709551615)
13+
; CHECK-NEXT: [[MATH:%.*]] = extractvalue { i256, i1 } [[TMP0]], 0
14+
; CHECK-NEXT: [[OV:%.*]] = extractvalue { i256, i1 } [[TMP0]], 1
15+
; CHECK-NEXT: br i1 [[OV]], label [[THEN:%.*]], label [[ELSE:%.*]]
16+
; CHECK: then:
17+
; CHECK-NEXT: ret i256 0
18+
; CHECK: else:
19+
; CHECK-NEXT: ret i256 [[MATH]]
20+
;
21+
entry:
22+
%add = add i256 %a, 18446744073709551615
23+
%cmp = icmp ne i256 %a, 0
24+
br i1 %cmp, label %then, label %else
25+
26+
then:
27+
ret i256 0
28+
29+
else:
30+
ret i256 %add
31+
}
32+
33+
define i256 @match(i256 %a) {
34+
; CHECK-LABEL: define i256 @match
35+
; CHECK-SAME: (i256 [[A:%.*]]) {
36+
; CHECK-NEXT: entry:
37+
; CHECK-NEXT: [[ADD:%.*]] = add i256 [[A]], -1
38+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i256 [[A]], 0
39+
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
40+
; CHECK: then:
41+
; CHECK-NEXT: ret i256 0
42+
; CHECK: else:
43+
; CHECK-NEXT: ret i256 [[ADD]]
44+
;
45+
entry:
46+
%add = add i256 %a, -1
47+
%cmp = icmp ne i256 %a, 0
48+
br i1 %cmp, label %then, label %else
49+
50+
then:
51+
ret i256 0
52+
53+
else:
54+
ret i256 %add
55+
}

0 commit comments

Comments
 (0)