6
6
define i1 @shl_nsw_scmp (i8 %a , i1 %cond ) {
7
7
; CHECK-LABEL: define i1 @shl_nsw_scmp(
8
8
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
9
- ; CHECK-NEXT: [[A_SHL:%.*]] = shl nsw i8 [[A]], 3
10
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 8, i8 16
11
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A_SHL]], [[SEL]]
9
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 1, i8 2
10
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[SEL1]], [[A]]
12
11
; CHECK-NEXT: ret i1 [[CMP]]
13
12
;
14
13
%a_shl = shl nsw i8 %a , 3
@@ -20,9 +19,8 @@ define i1 @shl_nsw_scmp(i8 %a, i1 %cond) {
20
19
define i1 @c_shl_nsw_scmp (i8 %a , i1 %cond ) {
21
20
; CHECK-LABEL: define i1 @c_shl_nsw_scmp(
22
21
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
23
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 8, i8 16
24
- ; CHECK-NEXT: [[A_SHL:%.*]] = shl nsw i8 [[A]], 3
25
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[SEL]], [[A_SHL]]
22
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 1, i8 2
23
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[SEL1]], [[A]]
26
24
; CHECK-NEXT: ret i1 [[CMP]]
27
25
;
28
26
%sel = select i1 %cond , i8 8 , i8 16
@@ -48,9 +46,8 @@ define i1 @shl_nsw_scmp_mismatch(i8 %a, i1 %cond) {
48
46
define i1 @shl_nsw_ucmp (i8 %a , i1 %cond ) {
49
47
; CHECK-LABEL: define i1 @shl_nsw_ucmp(
50
48
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
51
- ; CHECK-NEXT: [[A_SHL:%.*]] = shl nsw i8 [[A]], 3
52
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 8, i8 24
53
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[A_SHL]], [[SEL]]
49
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 1, i8 3
50
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[SEL1]], [[A]]
54
51
; CHECK-NEXT: ret i1 [[CMP]]
55
52
;
56
53
%a_shl = shl nsw i8 %a , 3
@@ -64,9 +61,8 @@ define i1 @shl_nsw_ucmp(i8 %a, i1 %cond) {
64
61
define i1 @shl_nuw_ucmp (i8 %a , i1 %cond ) {
65
62
; CHECK-LABEL: define i1 @shl_nuw_ucmp(
66
63
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
67
- ; CHECK-NEXT: [[A_SHL:%.*]] = shl nuw i8 [[A]], 3
68
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 8, i8 32
69
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[A_SHL]], [[SEL]]
64
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 1, i8 4
65
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[SEL1]], [[A]]
70
66
; CHECK-NEXT: ret i1 [[CMP]]
71
67
;
72
68
%a_shl = shl nuw i8 %a , 3
@@ -79,9 +75,8 @@ define i1 @shl_nuw_ucmp(i8 %a, i1 %cond) {
79
75
define i1 @shl_nuw_eqcmp (i8 %a , i1 %cond ) {
80
76
; CHECK-LABEL: define i1 @shl_nuw_eqcmp(
81
77
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
82
- ; CHECK-NEXT: [[A_SHL:%.*]] = shl nuw i8 [[A]], 3
83
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 8, i8 64
84
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[SEL]], [[A_SHL]]
78
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 1, i8 8
79
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[SEL1]], [[A]]
85
80
; CHECK-NEXT: ret i1 [[CMP]]
86
81
;
87
82
%a_shl = shl nuw i8 %a , 3
@@ -110,9 +105,8 @@ define i1 @shl_nuw_scmp(i8 %a, i1 %cond) {
110
105
define i1 @ashr_exact_ucmp (i8 %a , i1 %cond ) {
111
106
; CHECK-LABEL: define i1 @ashr_exact_ucmp(
112
107
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
113
- ; CHECK-NEXT: [[A_SHL:%.*]] = ashr exact i8 [[A]], 2
114
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 12, i8 4
115
- ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[A_SHL]], [[SEL]]
108
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 48, i8 16
109
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[SEL1]], [[A]]
116
110
; CHECK-NEXT: ret i1 [[CMP]]
117
111
;
118
112
%a_shl = ashr exact i8 %a , 2
@@ -124,9 +118,8 @@ define i1 @ashr_exact_ucmp(i8 %a, i1 %cond) {
124
118
define i1 @ashr_exact_scmp (i8 %a , i1 %cond ) {
125
119
; CHECK-LABEL: define i1 @ashr_exact_scmp(
126
120
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
127
- ; CHECK-NEXT: [[A_SHL:%.*]] = ashr exact i8 [[A]], 2
128
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 8, i8 4
129
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A_SHL]], [[SEL]]
121
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 32, i8 16
122
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[SEL1]], [[A]]
130
123
; CHECK-NEXT: ret i1 [[CMP]]
131
124
;
132
125
%a_shl = ashr exact i8 %a , 2
@@ -140,9 +133,8 @@ define i1 @ashr_exact_scmp(i8 %a, i1 %cond) {
140
133
define i1 @lshr_exact_ucmp (i8 %a , i1 %cond ) {
141
134
; CHECK-LABEL: define i1 @lshr_exact_ucmp(
142
135
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
143
- ; CHECK-NEXT: [[A_SHL:%.*]] = lshr exact i8 [[A]], 1
144
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 1, i8 3
145
- ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ugt i8 [[A_SHL]], [[SEL]]
136
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 2, i8 6
137
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[SEL1]], [[A]]
146
138
; CHECK-NEXT: ret i1 [[CMP]]
147
139
;
148
140
%a_shl = lshr exact i8 %a , 1
@@ -154,9 +146,8 @@ define i1 @lshr_exact_ucmp(i8 %a, i1 %cond) {
154
146
define i1 @lshr_exact_scmp (i8 %a , i1 %cond ) {
155
147
; CHECK-LABEL: define i1 @lshr_exact_scmp(
156
148
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
157
- ; CHECK-NEXT: [[A_SHL:%.*]] = lshr exact i8 [[A]], 1
158
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 1, i8 3
159
- ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign uge i8 [[A_SHL]], [[SEL]]
149
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 2, i8 6
150
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[SEL1]], [[A]]
160
151
; CHECK-NEXT: ret i1 [[CMP]]
161
152
;
162
153
%a_shl = lshr exact i8 %a , 1
@@ -170,9 +161,8 @@ define i1 @lshr_exact_scmp(i8 %a, i1 %cond) {
170
161
define i1 @zext_ucmp (i8 %a , i16 %c0 , i16 %c1 , i1 %cond ) {
171
162
; CHECK-LABEL: define i1 @zext_ucmp(
172
163
; CHECK-SAME: i8 [[A:%.*]], i16 [[C0:%.*]], i16 [[C1:%.*]], i1 [[COND:%.*]]) {
173
- ; CHECK-NEXT: [[IDX:%.*]] = zext i8 [[A]] to i16
174
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i16 128, i16 64
175
- ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ugt i16 [[SEL]], [[IDX]]
164
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 -128, i8 64
165
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[SEL1]], [[A]]
176
166
; CHECK-NEXT: ret i1 [[CMP]]
177
167
;
178
168
%idx = zext i8 %a to i16
@@ -184,9 +174,8 @@ define i1 @zext_ucmp(i8 %a, i16 %c0, i16 %c1, i1 %cond) {
184
174
define i1 @zext_scmp_mismatch (i8 %a , i16 %c0 , i16 %c1 , i1 %cond ) {
185
175
; CHECK-LABEL: define i1 @zext_scmp_mismatch(
186
176
; CHECK-SAME: i8 [[A:%.*]], i16 [[C0:%.*]], i16 [[C1:%.*]], i1 [[COND:%.*]]) {
187
- ; CHECK-NEXT: [[IDX:%.*]] = zext i8 [[A]] to i16
188
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i16 128, i16 64
189
- ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ugt i16 [[SEL]], [[IDX]]
177
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 -128, i8 64
178
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[SEL1]], [[A]]
190
179
; CHECK-NEXT: ret i1 [[CMP]]
191
180
;
192
181
%idx = zext i8 %a to i16
@@ -200,9 +189,8 @@ define i1 @zext_scmp_mismatch(i8 %a, i16 %c0, i16 %c1, i1 %cond) {
200
189
define i1 @sext_ucmp (i8 %a , i16 %c0 , i16 %c1 , i1 %cond ) {
201
190
; CHECK-LABEL: define i1 @sext_ucmp(
202
191
; CHECK-SAME: i8 [[A:%.*]], i16 [[C0:%.*]], i16 [[C1:%.*]], i1 [[COND:%.*]]) {
203
- ; CHECK-NEXT: [[IDX:%.*]] = sext i8 [[A]] to i16
204
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i16 -127, i16 126
205
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i16 [[SEL]], [[IDX]]
192
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 -127, i8 126
193
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[SEL1]], [[A]]
206
194
; CHECK-NEXT: ret i1 [[CMP]]
207
195
;
208
196
%idx = sext i8 %a to i16
@@ -228,9 +216,8 @@ define i1 @sext_ucmp_mismatch(i8 %a, i16 %c0, i16 %c1, i1 %cond) {
228
216
define i1 @sext_scmp (i8 %a , i16 %c0 , i16 %c1 , i1 %cond ) {
229
217
; CHECK-LABEL: define i1 @sext_scmp(
230
218
; CHECK-SAME: i8 [[A:%.*]], i16 [[C0:%.*]], i16 [[C1:%.*]], i1 [[COND:%.*]]) {
231
- ; CHECK-NEXT: [[IDX:%.*]] = sext i8 [[A]] to i16
232
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i16 -5, i16 9
233
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i16 [[SEL]], [[IDX]]
219
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 -5, i8 9
220
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[SEL1]], [[A]]
234
221
; CHECK-NEXT: ret i1 [[CMP]]
235
222
;
236
223
%idx = sext i8 %a to i16
@@ -244,9 +231,8 @@ define i1 @sext_scmp(i8 %a, i16 %c0, i16 %c1, i1 %cond) {
244
231
define i1 @or_disjoint_ucmp (i8 %a , i1 %cond ) {
245
232
; CHECK-LABEL: define i1 @or_disjoint_ucmp(
246
233
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
247
- ; CHECK-NEXT: [[OR:%.*]] = or disjoint i8 [[A]], 3
248
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 11, i8 7
249
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[OR]], [[SEL]]
234
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 8, i8 4
235
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[SEL1]], [[A]]
250
236
; CHECK-NEXT: ret i1 [[CMP]]
251
237
;
252
238
%or = or disjoint i8 %a , 3
@@ -258,9 +244,8 @@ define i1 @or_disjoint_ucmp(i8 %a, i1 %cond) {
258
244
define i1 @or_disjoint_scmp (i8 %a , i1 %cond ) {
259
245
; CHECK-LABEL: define i1 @or_disjoint_scmp(
260
246
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
261
- ; CHECK-NEXT: [[OR:%.*]] = or disjoint i8 [[A]], 3
262
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 11, i8 7
263
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[OR]], [[SEL]]
247
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 8, i8 4
248
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[SEL1]], [[A]]
264
249
; CHECK-NEXT: ret i1 [[CMP]]
265
250
;
266
251
%or = or disjoint i8 %a , 3
@@ -288,7 +273,7 @@ define i1 @sub_eq(i8 %a, i1 %cond) {
288
273
; CHECK-LABEL: define i1 @sub_eq(
289
274
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
290
275
; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[COND]], i8 4, i8 12
291
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[A ]], [[TMP1 ]]
276
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1 ]], [[A ]]
292
277
; CHECK-NEXT: ret i1 [[CMP]]
293
278
;
294
279
%sub = sub i8 %a , 5
@@ -317,7 +302,7 @@ define i1 @add_ne(i8 %a, i1 %cond) {
317
302
; CHECK-LABEL: define i1 @add_ne(
318
303
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
319
304
; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[COND]], i8 -6, i8 2
320
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[A ]], [[TMP1 ]]
305
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[TMP1 ]], [[A ]]
321
306
; CHECK-NEXT: ret i1 [[CMP]]
322
307
;
323
308
%sub = add i8 %a , 5
@@ -330,9 +315,8 @@ define i1 @add_ne(i8 %a, i1 %cond) {
330
315
define i1 @xor_eq (i8 %a , i1 %cond ) {
331
316
; CHECK-LABEL: define i1 @xor_eq(
332
317
; CHECK-SAME: i8 [[A:%.*]], i1 [[COND:%.*]]) {
333
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i8 -1, i8 7
334
- ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[A]], [[SEL]]
335
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 5
318
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[COND]], i8 -6, i8 2
319
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[SEL1]], [[A]]
336
320
; CHECK-NEXT: ret i1 [[CMP]]
337
321
;
338
322
%sub = xor i8 %a , 5
0 commit comments