Skip to content

Commit d598913

Browse files
committed
[IPSCCP] add test for range attribute handling. NFC.
1 parent 8669225 commit d598913

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=ipsccp -S | FileCheck %s
3+
4+
declare void @use(i1)
5+
declare i32 @get_i32()
6+
7+
define void @range_attribute(i32 range(i32 0, 10) %v) {
8+
; CHECK-LABEL: @range_attribute(
9+
; CHECK-NEXT: [[C1:%.*]] = icmp ult i32 [[V:%.*]], 10
10+
; CHECK-NEXT: call void @use(i1 [[C1]])
11+
; CHECK-NEXT: [[C2:%.*]] = icmp ult i32 [[V]], 9
12+
; CHECK-NEXT: call void @use(i1 [[C2]])
13+
; CHECK-NEXT: [[C3:%.*]] = icmp ugt i32 [[V]], 9
14+
; CHECK-NEXT: call void @use(i1 [[C3]])
15+
; CHECK-NEXT: [[C4:%.*]] = icmp ugt i32 [[V]], 8
16+
; CHECK-NEXT: call void @use(i1 [[C4]])
17+
; CHECK-NEXT: ret void
18+
;
19+
%c1 = icmp ult i32 %v, 10
20+
call void @use(i1 %c1)
21+
%c2 = icmp ult i32 %v, 9
22+
call void @use(i1 %c2)
23+
%c3 = icmp ugt i32 %v, 9
24+
call void @use(i1 %c3)
25+
%c4 = icmp ugt i32 %v, 8
26+
call void @use(i1 %c4)
27+
ret void
28+
}
29+
30+
define i32 @range_attribute_single(i32 range(i32 0, 1) %v) {
31+
; CHECK-LABEL: @range_attribute_single(
32+
; CHECK-NEXT: ret i32 [[V:%.*]]
33+
;
34+
ret i32 %v
35+
}
36+
37+
define void @call_range_attribute(ptr %p) {
38+
; CHECK-LABEL: @call_range_attribute(
39+
; CHECK-NEXT: [[V:%.*]] = call range(i32 0, 10) i32 @get_i32()
40+
; CHECK-NEXT: [[C1:%.*]] = icmp ult i32 [[V]], 10
41+
; CHECK-NEXT: call void @use(i1 [[C1]])
42+
; CHECK-NEXT: [[C2:%.*]] = icmp ult i32 [[V]], 9
43+
; CHECK-NEXT: call void @use(i1 [[C2]])
44+
; CHECK-NEXT: [[C3:%.*]] = icmp ugt i32 [[V]], 9
45+
; CHECK-NEXT: call void @use(i1 [[C3]])
46+
; CHECK-NEXT: [[C4:%.*]] = icmp ugt i32 [[V]], 8
47+
; CHECK-NEXT: call void @use(i1 [[C4]])
48+
; CHECK-NEXT: ret void
49+
;
50+
%v = call range(i32 0, 10) i32 @get_i32()
51+
%c1 = icmp ult i32 %v, 10
52+
call void @use(i1 %c1)
53+
%c2 = icmp ult i32 %v, 9
54+
call void @use(i1 %c2)
55+
%c3 = icmp ugt i32 %v, 9
56+
call void @use(i1 %c3)
57+
%c4 = icmp ugt i32 %v, 8
58+
call void @use(i1 %c4)
59+
ret void
60+
}
61+
62+
63+
declare range(i32 0, 10) i32 @get_i32_in_range()
64+
65+
define void @call_range_result(ptr %p) {
66+
; CHECK-LABEL: @call_range_result(
67+
; CHECK-NEXT: [[V:%.*]] = call i32 @get_i32_in_range()
68+
; CHECK-NEXT: [[C1:%.*]] = icmp ult i32 [[V]], 10
69+
; CHECK-NEXT: call void @use(i1 [[C1]])
70+
; CHECK-NEXT: [[C2:%.*]] = icmp ult i32 [[V]], 9
71+
; CHECK-NEXT: call void @use(i1 [[C2]])
72+
; CHECK-NEXT: [[C3:%.*]] = icmp ugt i32 [[V]], 9
73+
; CHECK-NEXT: call void @use(i1 [[C3]])
74+
; CHECK-NEXT: [[C4:%.*]] = icmp ugt i32 [[V]], 8
75+
; CHECK-NEXT: call void @use(i1 [[C4]])
76+
; CHECK-NEXT: ret void
77+
;
78+
%v = call i32 @get_i32_in_range()
79+
%c1 = icmp ult i32 %v, 10
80+
call void @use(i1 %c1)
81+
%c2 = icmp ult i32 %v, 9
82+
call void @use(i1 %c2)
83+
%c3 = icmp ugt i32 %v, 9
84+
call void @use(i1 %c3)
85+
%c4 = icmp ugt i32 %v, 8
86+
call void @use(i1 %c4)
87+
ret void
88+
}

0 commit comments

Comments
 (0)