1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2
- ; RUN: opt < %s -passes=ipsccp -S | FileCheck %s
2
+ ; RUN: opt < %s -passes=ipsccp -S | FileCheck %s --check-prefixes=CHECK,IPSCCP
3
+ ; RUN: opt < %s -passes=sccp -S | FileCheck %s --check-prefixes=CHECK,SCCP
3
4
4
5
declare void @use (i1 )
5
6
declare i32 @get_i32 ()
6
7
7
8
define void @range_attribute (i32 range(i32 0 , 10 ) %v ) {
8
- ; CHECK-LABEL: @range_attribute(
9
- ; CHECK-NEXT: call void @use(i1 true)
10
- ; CHECK-NEXT: [[C2:%.*]] = icmp ult i32 [[V:%.*]], 9
11
- ; CHECK-NEXT: call void @use(i1 [[C2]])
12
- ; CHECK-NEXT: call void @use(i1 false)
13
- ; CHECK-NEXT: [[C4:%.*]] = icmp ugt i32 [[V]], 8
14
- ; CHECK-NEXT: call void @use(i1 [[C4]])
15
- ; CHECK-NEXT: ret void
9
+ ; IPSCCP-LABEL: @range_attribute(
10
+ ; IPSCCP-NEXT: call void @use(i1 true)
11
+ ; IPSCCP-NEXT: [[C2:%.*]] = icmp ult i32 [[V:%.*]], 9
12
+ ; IPSCCP-NEXT: call void @use(i1 [[C2]])
13
+ ; IPSCCP-NEXT: call void @use(i1 false)
14
+ ; IPSCCP-NEXT: [[C4:%.*]] = icmp ugt i32 [[V]], 8
15
+ ; IPSCCP-NEXT: call void @use(i1 [[C4]])
16
+ ; IPSCCP-NEXT: ret void
17
+ ;
18
+ ; SCCP-LABEL: @range_attribute(
19
+ ; SCCP-NEXT: [[C1:%.*]] = icmp ult i32 [[V:%.*]], 10
20
+ ; SCCP-NEXT: call void @use(i1 [[C1]])
21
+ ; SCCP-NEXT: [[C2:%.*]] = icmp ult i32 [[V]], 9
22
+ ; SCCP-NEXT: call void @use(i1 [[C2]])
23
+ ; SCCP-NEXT: [[C3:%.*]] = icmp ugt i32 [[V]], 9
24
+ ; SCCP-NEXT: call void @use(i1 [[C3]])
25
+ ; SCCP-NEXT: [[C4:%.*]] = icmp ugt i32 [[V]], 8
26
+ ; SCCP-NEXT: call void @use(i1 [[C4]])
27
+ ; SCCP-NEXT: ret void
16
28
;
17
29
%c1 = icmp ult i32 %v , 10
18
30
call void @use (i1 %c1 )
@@ -26,8 +38,11 @@ define void @range_attribute(i32 range(i32 0, 10) %v) {
26
38
}
27
39
28
40
define i32 @range_attribute_single (i32 range(i32 0 , 1 ) %v ) {
29
- ; CHECK-LABEL: @range_attribute_single(
30
- ; CHECK-NEXT: ret i32 0
41
+ ; IPSCCP-LABEL: @range_attribute_single(
42
+ ; IPSCCP-NEXT: ret i32 0
43
+ ;
44
+ ; SCCP-LABEL: @range_attribute_single(
45
+ ; SCCP-NEXT: ret i32 [[V:%.*]]
31
46
;
32
47
ret i32 %v
33
48
}
@@ -82,72 +97,106 @@ define void @call_range_result() {
82
97
}
83
98
84
99
define internal i1 @ip_cmp_range_attribute (i32 %v ) {
85
- ; CHECK-LABEL: @ip_cmp_range_attribute(
86
- ; CHECK-NEXT: ret i1 poison
100
+ ; IPSCCP-LABEL: @ip_cmp_range_attribute(
101
+ ; IPSCCP-NEXT: ret i1 poison
102
+ ;
103
+ ; SCCP-LABEL: @ip_cmp_range_attribute(
104
+ ; SCCP-NEXT: [[C:%.*]] = icmp ult i32 [[V:%.*]], 10
105
+ ; SCCP-NEXT: ret i1 [[C]]
87
106
;
88
107
%c = icmp ult i32 %v , 10
89
108
ret i1 %c
90
109
}
91
110
92
111
define i1 @ip_range_attribute (i32 range(i32 0 , 10 ) %v ) {
93
- ; CHECK-LABEL: @ip_range_attribute(
94
- ; CHECK-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_attribute(i32 [[V:%.*]])
95
- ; CHECK-NEXT: ret i1 true
112
+ ; IPSCCP-LABEL: @ip_range_attribute(
113
+ ; IPSCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_attribute(i32 [[V:%.*]])
114
+ ; IPSCCP-NEXT: ret i1 true
115
+ ;
116
+ ; SCCP-LABEL: @ip_range_attribute(
117
+ ; SCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_attribute(i32 [[V:%.*]])
118
+ ; SCCP-NEXT: ret i1 [[C]]
96
119
;
97
120
%c = call i1 @ip_cmp_range_attribute (i32 %v )
98
121
ret i1 %c
99
122
}
100
123
101
124
define internal i1 @ip_cmp_range_call (i32 %v ) {
102
- ; CHECK-LABEL: @ip_cmp_range_call(
103
- ; CHECK-NEXT: ret i1 poison
125
+ ; IPSCCP-LABEL: @ip_cmp_range_call(
126
+ ; IPSCCP-NEXT: ret i1 poison
127
+ ;
128
+ ; SCCP-LABEL: @ip_cmp_range_call(
129
+ ; SCCP-NEXT: [[C:%.*]] = icmp ult i32 [[V:%.*]], 10
130
+ ; SCCP-NEXT: ret i1 [[C]]
104
131
;
105
132
%c = icmp ult i32 %v , 10
106
133
ret i1 %c
107
134
}
108
135
109
136
define i1 @ip_range_call () {
110
- ; CHECK-LABEL: @ip_range_call(
111
- ; CHECK-NEXT: [[V:%.*]] = call range(i32 0, 10) i32 @get_i32()
112
- ; CHECK-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_call(i32 [[V]])
113
- ; CHECK-NEXT: ret i1 true
137
+ ; IPSCCP-LABEL: @ip_range_call(
138
+ ; IPSCCP-NEXT: [[V:%.*]] = call range(i32 0, 10) i32 @get_i32()
139
+ ; IPSCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_call(i32 [[V]])
140
+ ; IPSCCP-NEXT: ret i1 true
141
+ ;
142
+ ; SCCP-LABEL: @ip_range_call(
143
+ ; SCCP-NEXT: [[V:%.*]] = call range(i32 0, 10) i32 @get_i32()
144
+ ; SCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_call(i32 [[V]])
145
+ ; SCCP-NEXT: ret i1 [[C]]
114
146
;
115
147
%v = call range(i32 0 , 10 ) i32 @get_i32 ()
116
148
%c = call i1 @ip_cmp_range_call (i32 %v )
117
149
ret i1 %c
118
150
}
119
151
120
152
define internal i1 @ip_cmp_range_result (i32 %v ) {
121
- ; CHECK-LABEL: @ip_cmp_range_result(
122
- ; CHECK-NEXT: ret i1 poison
153
+ ; IPSCCP-LABEL: @ip_cmp_range_result(
154
+ ; IPSCCP-NEXT: ret i1 poison
155
+ ;
156
+ ; SCCP-LABEL: @ip_cmp_range_result(
157
+ ; SCCP-NEXT: [[C:%.*]] = icmp ult i32 [[V:%.*]], 10
158
+ ; SCCP-NEXT: ret i1 [[C]]
123
159
;
124
160
%c = icmp ult i32 %v , 10
125
161
ret i1 %c
126
162
}
127
163
128
164
define i1 @ip_range_result () {
129
- ; CHECK-LABEL: @ip_range_result(
130
- ; CHECK-NEXT: [[V:%.*]] = call range(i32 0, 10) i32 @get_i32()
131
- ; CHECK-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_result(i32 [[V]])
132
- ; CHECK-NEXT: ret i1 true
165
+ ; IPSCCP-LABEL: @ip_range_result(
166
+ ; IPSCCP-NEXT: [[V:%.*]] = call range(i32 0, 10) i32 @get_i32()
167
+ ; IPSCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_result(i32 [[V]])
168
+ ; IPSCCP-NEXT: ret i1 true
169
+ ;
170
+ ; SCCP-LABEL: @ip_range_result(
171
+ ; SCCP-NEXT: [[V:%.*]] = call range(i32 0, 10) i32 @get_i32()
172
+ ; SCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_range_result(i32 [[V]])
173
+ ; SCCP-NEXT: ret i1 [[C]]
133
174
;
134
175
%v = call range(i32 0 , 10 ) i32 @get_i32 ()
135
176
%c = call i1 @ip_cmp_range_result (i32 %v )
136
177
ret i1 %c
137
178
}
138
179
139
180
define internal i1 @ip_cmp_with_range_attribute (i32 range(i32 0 , 10 ) %v ) {
140
- ; CHECK-LABEL: @ip_cmp_with_range_attribute(
141
- ; CHECK-NEXT: ret i1 poison
181
+ ; IPSCCP-LABEL: @ip_cmp_with_range_attribute(
182
+ ; IPSCCP-NEXT: ret i1 poison
183
+ ;
184
+ ; SCCP-LABEL: @ip_cmp_with_range_attribute(
185
+ ; SCCP-NEXT: [[C:%.*]] = icmp eq i32 [[V:%.*]], 5
186
+ ; SCCP-NEXT: ret i1 [[C]]
142
187
;
143
188
%c = icmp eq i32 %v , 5
144
189
ret i1 %c
145
190
}
146
191
147
192
define i1 @ip_range_attribute_constant () {
148
- ; CHECK-LABEL: @ip_range_attribute_constant(
149
- ; CHECK-NEXT: [[C:%.*]] = call i1 @ip_cmp_with_range_attribute(i32 5)
150
- ; CHECK-NEXT: ret i1 true
193
+ ; IPSCCP-LABEL: @ip_range_attribute_constant(
194
+ ; IPSCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_with_range_attribute(i32 5)
195
+ ; IPSCCP-NEXT: ret i1 true
196
+ ;
197
+ ; SCCP-LABEL: @ip_range_attribute_constant(
198
+ ; SCCP-NEXT: [[C:%.*]] = call i1 @ip_cmp_with_range_attribute(i32 5)
199
+ ; SCCP-NEXT: ret i1 [[C]]
151
200
;
152
201
%c = call i1 @ip_cmp_with_range_attribute (i32 5 )
153
202
ret i1 %c
0 commit comments