@@ -5,9 +5,9 @@ declare void @use.i8(i8)
5
5
declare void @use.i16 (i16 )
6
6
define i1 @src_is_mask_zext (i16 %x_in , i8 %y ) {
7
7
; CHECK-LABEL: @src_is_mask_zext(
8
- ; CHECK-NEXT: [[X:%.*]] = xor i16 [[X_IN:%.*]], 123
9
8
; CHECK-NEXT: [[M_IN:%.*]] = lshr i8 -1, [[Y:%.*]]
10
9
; CHECK-NEXT: [[MASK:%.*]] = zext i8 [[M_IN]] to i16
10
+ ; CHECK-NEXT: [[X:%.*]] = xor i16 [[X_IN:%.*]], 123
11
11
; CHECK-NEXT: [[R:%.*]] = icmp ule i16 [[X]], [[MASK]]
12
12
; CHECK-NEXT: ret i1 [[R]]
13
13
;
@@ -22,11 +22,11 @@ define i1 @src_is_mask_zext(i16 %x_in, i8 %y) {
22
22
23
23
define i1 @src_is_mask_zext_fail_not_mask (i16 %x_in , i8 %y ) {
24
24
; CHECK-LABEL: @src_is_mask_zext_fail_not_mask(
25
- ; CHECK-NEXT: [[X:%.*]] = xor i16 [[X_IN:%.*]], 123
26
25
; CHECK-NEXT: [[M_IN:%.*]] = lshr i8 -2, [[Y:%.*]]
27
26
; CHECK-NEXT: [[MASK:%.*]] = zext i8 [[M_IN]] to i16
28
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[X]], [[MASK]]
29
- ; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[X]]
27
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i16 [[X_IN:%.*]], -124
28
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i16 [[TMP1]], [[MASK]]
29
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[TMP2]], -1
30
30
; CHECK-NEXT: ret i1 [[R]]
31
31
;
32
32
%x = xor i16 %x_in , 123
@@ -80,10 +80,10 @@ define i1 @src_is_mask_sext_fail_multiuse(i16 %x_in, i8 %y) {
80
80
81
81
define i1 @src_is_mask_and (i8 %x_in , i8 %y , i8 %z ) {
82
82
; CHECK-LABEL: @src_is_mask_and(
83
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
84
83
; CHECK-NEXT: [[MY:%.*]] = lshr i8 7, [[Y:%.*]]
85
84
; CHECK-NEXT: [[MZ:%.*]] = lshr i8 -1, [[Z:%.*]]
86
85
; CHECK-NEXT: [[MASK:%.*]] = and i8 [[MY]], [[MZ]]
86
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
87
87
; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[X]], [[MASK]]
88
88
; CHECK-NEXT: ret i1 [[R]]
89
89
;
@@ -99,12 +99,12 @@ define i1 @src_is_mask_and(i8 %x_in, i8 %y, i8 %z) {
99
99
100
100
define i1 @src_is_mask_and_fail_mixed (i8 %x_in , i8 %y , i8 %z ) {
101
101
; CHECK-LABEL: @src_is_mask_and_fail_mixed(
102
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
103
102
; CHECK-NEXT: [[MY:%.*]] = ashr i8 -8, [[Y:%.*]]
104
103
; CHECK-NEXT: [[MZ:%.*]] = lshr i8 -1, [[Z:%.*]]
105
104
; CHECK-NEXT: [[MASK:%.*]] = and i8 [[MY]], [[MZ]]
106
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], [[MASK]]
107
- ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[X]], [[AND]]
105
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[X_IN:%.*]], -124
106
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i8 [[MASK]], [[TMP1]]
107
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[TMP2]], -1
108
108
; CHECK-NEXT: ret i1 [[R]]
109
109
;
110
110
%x = xor i8 %x_in , 123
@@ -119,9 +119,9 @@ define i1 @src_is_mask_and_fail_mixed(i8 %x_in, i8 %y, i8 %z) {
119
119
120
120
define i1 @src_is_mask_or (i8 %x_in , i8 %y ) {
121
121
; CHECK-LABEL: @src_is_mask_or(
122
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
123
122
; CHECK-NEXT: [[MY:%.*]] = lshr i8 -1, [[Y:%.*]]
124
123
; CHECK-NEXT: [[MASK:%.*]] = and i8 [[MY]], 7
124
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
125
125
; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[X]], [[MASK]]
126
126
; CHECK-NEXT: ret i1 [[R]]
127
127
;
@@ -136,9 +136,9 @@ define i1 @src_is_mask_or(i8 %x_in, i8 %y) {
136
136
137
137
define i1 @src_is_mask_xor (i8 %x_in , i8 %y ) {
138
138
; CHECK-LABEL: @src_is_mask_xor(
139
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
140
139
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
141
140
; CHECK-NEXT: [[MASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
141
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
142
142
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X]], [[MASK]]
143
143
; CHECK-NEXT: ret i1 [[R]]
144
144
;
@@ -152,11 +152,11 @@ define i1 @src_is_mask_xor(i8 %x_in, i8 %y) {
152
152
153
153
define i1 @src_is_mask_xor_fail_notmask (i8 %x_in , i8 %y ) {
154
154
; CHECK-LABEL: @src_is_mask_xor_fail_notmask(
155
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
156
155
; CHECK-NEXT: [[TMP1:%.*]] = sub i8 0, [[Y:%.*]]
157
156
; CHECK-NEXT: [[NOTMASK:%.*]] = xor i8 [[TMP1]], [[Y]]
158
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], [[NOTMASK]]
159
- ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[AND]], [[X]]
157
+ ; CHECK-NEXT: [[TMP2:%.*]] = xor i8 [[X_IN:%.*]], -124
158
+ ; CHECK-NEXT: [[TMP3:%.*]] = or i8 [[NOTMASK]], [[TMP2]]
159
+ ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[TMP3]], -1
160
160
; CHECK-NEXT: ret i1 [[R]]
161
161
;
162
162
%x = xor i8 %x_in , 123
@@ -170,10 +170,10 @@ define i1 @src_is_mask_xor_fail_notmask(i8 %x_in, i8 %y) {
170
170
171
171
define i1 @src_is_mask_select (i8 %x_in , i8 %y , i1 %cond ) {
172
172
; CHECK-LABEL: @src_is_mask_select(
173
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
174
173
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
175
174
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
176
175
; CHECK-NEXT: [[MASK:%.*]] = select i1 [[COND:%.*]], i8 [[YMASK]], i8 15
176
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
177
177
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X]], [[MASK]]
178
178
; CHECK-NEXT: ret i1 [[R]]
179
179
;
@@ -245,11 +245,11 @@ define i1 @src_is_mask_shl_lshr_fail_not_allones(i8 %x_in, i8 %y, i1 %cond) {
245
245
246
246
define i1 @src_is_mask_lshr (i8 %x_in , i8 %y , i8 %z , i1 %cond ) {
247
247
; CHECK-LABEL: @src_is_mask_lshr(
248
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
249
248
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
250
249
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
251
250
; CHECK-NEXT: [[SMASK:%.*]] = select i1 [[COND:%.*]], i8 [[YMASK]], i8 15
252
251
; CHECK-NEXT: [[MASK:%.*]] = lshr i8 [[SMASK]], [[Z:%.*]]
252
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
253
253
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X]], [[MASK]]
254
254
; CHECK-NEXT: ret i1 [[R]]
255
255
;
@@ -265,11 +265,11 @@ define i1 @src_is_mask_lshr(i8 %x_in, i8 %y, i8 %z, i1 %cond) {
265
265
266
266
define i1 @src_is_mask_ashr (i8 %x_in , i8 %y , i8 %z , i1 %cond ) {
267
267
; CHECK-LABEL: @src_is_mask_ashr(
268
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
269
268
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
270
269
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
271
270
; CHECK-NEXT: [[SMASK:%.*]] = select i1 [[COND:%.*]], i8 [[YMASK]], i8 15
272
271
; CHECK-NEXT: [[MASK:%.*]] = ashr i8 [[SMASK]], [[Z:%.*]]
272
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
273
273
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X]], [[MASK]]
274
274
; CHECK-NEXT: ret i1 [[R]]
275
275
;
@@ -285,9 +285,9 @@ define i1 @src_is_mask_ashr(i8 %x_in, i8 %y, i8 %z, i1 %cond) {
285
285
286
286
define i1 @src_is_mask_p2_m1 (i8 %x_in , i8 %y ) {
287
287
; CHECK-LABEL: @src_is_mask_p2_m1(
288
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
289
288
; CHECK-NEXT: [[P2ORZ:%.*]] = shl i8 2, [[Y:%.*]]
290
289
; CHECK-NEXT: [[MASK:%.*]] = add i8 [[P2ORZ]], -1
290
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
291
291
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X]], [[MASK]]
292
292
; CHECK-NEXT: ret i1 [[R]]
293
293
;
@@ -301,10 +301,10 @@ define i1 @src_is_mask_p2_m1(i8 %x_in, i8 %y) {
301
301
302
302
define i1 @src_is_mask_umax (i8 %x_in , i8 %y ) {
303
303
; CHECK-LABEL: @src_is_mask_umax(
304
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
305
304
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
306
305
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
307
306
; CHECK-NEXT: [[MASK:%.*]] = call i8 @llvm.umax.i8(i8 [[YMASK]], i8 3)
307
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
308
308
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X]], [[MASK]]
309
309
; CHECK-NEXT: ret i1 [[R]]
310
310
;
@@ -320,11 +320,11 @@ define i1 @src_is_mask_umax(i8 %x_in, i8 %y) {
320
320
321
321
define i1 @src_is_mask_umin (i8 %x_in , i8 %y , i8 %z ) {
322
322
; CHECK-LABEL: @src_is_mask_umin(
323
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
324
323
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
325
324
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
326
325
; CHECK-NEXT: [[ZMASK:%.*]] = lshr i8 15, [[Z:%.*]]
327
326
; CHECK-NEXT: [[MASK:%.*]] = call i8 @llvm.umin.i8(i8 [[YMASK]], i8 [[ZMASK]])
327
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
328
328
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X]], [[MASK]]
329
329
; CHECK-NEXT: ret i1 [[R]]
330
330
;
@@ -341,12 +341,12 @@ define i1 @src_is_mask_umin(i8 %x_in, i8 %y, i8 %z) {
341
341
342
342
define i1 @src_is_mask_umin_fail_mismatch (i8 %x_in , i8 %y ) {
343
343
; CHECK-LABEL: @src_is_mask_umin_fail_mismatch(
344
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
345
344
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
346
345
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
347
346
; CHECK-NEXT: [[MASK:%.*]] = call i8 @llvm.umin.i8(i8 [[YMASK]], i8 -32)
348
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[MASK]], [[X]]
349
- ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[AND]], [[X]]
347
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[X_IN:%.*]], -124
348
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i8 [[MASK]], [[TMP1]]
349
+ ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[TMP2]], -1
350
350
; CHECK-NEXT: ret i1 [[R]]
351
351
;
352
352
%x = xor i8 %x_in , 123
@@ -361,10 +361,10 @@ define i1 @src_is_mask_umin_fail_mismatch(i8 %x_in, i8 %y) {
361
361
362
362
define i1 @src_is_mask_smax (i8 %x_in , i8 %y ) {
363
363
; CHECK-LABEL: @src_is_mask_smax(
364
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
365
364
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
366
365
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
367
366
; CHECK-NEXT: [[MASK:%.*]] = call i8 @llvm.smax.i8(i8 [[YMASK]], i8 -1)
367
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
368
368
; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[X]], [[MASK]]
369
369
; CHECK-NEXT: ret i1 [[R]]
370
370
;
@@ -380,10 +380,10 @@ define i1 @src_is_mask_smax(i8 %x_in, i8 %y) {
380
380
381
381
define i1 @src_is_mask_smin (i8 %x_in , i8 %y ) {
382
382
; CHECK-LABEL: @src_is_mask_smin(
383
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
384
383
; CHECK-NEXT: [[Y_M1:%.*]] = add i8 [[Y:%.*]], -1
385
384
; CHECK-NEXT: [[YMASK:%.*]] = xor i8 [[Y_M1]], [[Y]]
386
385
; CHECK-NEXT: [[MASK:%.*]] = call i8 @llvm.smin.i8(i8 [[YMASK]], i8 0)
386
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
387
387
; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[X]], [[MASK]]
388
388
; CHECK-NEXT: ret i1 [[R]]
389
389
;
@@ -399,9 +399,9 @@ define i1 @src_is_mask_smin(i8 %x_in, i8 %y) {
399
399
400
400
define i1 @src_is_mask_bitreverse_not_mask (i8 %x_in , i8 %y ) {
401
401
; CHECK-LABEL: @src_is_mask_bitreverse_not_mask(
402
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
403
402
; CHECK-NEXT: [[NMASK:%.*]] = shl nsw i8 -1, [[Y:%.*]]
404
403
; CHECK-NEXT: [[MASK:%.*]] = call i8 @llvm.bitreverse.i8(i8 [[NMASK]])
404
+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
405
405
; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[X]], [[MASK]]
406
406
; CHECK-NEXT: ret i1 [[R]]
407
407
;
@@ -417,7 +417,7 @@ define i1 @src_is_mask_bitreverse_not_mask(i8 %x_in, i8 %y) {
417
417
define i1 @src_is_notmask_sext (i16 %x_in , i8 %y ) {
418
418
; CHECK-LABEL: @src_is_notmask_sext(
419
419
; CHECK-NEXT: [[M_IN:%.*]] = shl i8 -8, [[Y:%.*]]
420
- ; CHECK-NEXT: [[TMP1:%.*]] = xor i16 [[X_IN:%.*]], -124
420
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i16 [[X_IN:%.*]], -128
421
421
; CHECK-NEXT: [[TMP2:%.*]] = sext i8 [[M_IN]] to i16
422
422
; CHECK-NEXT: [[R:%.*]] = icmp uge i16 [[TMP1]], [[TMP2]]
423
423
; CHECK-NEXT: ret i1 [[R]]
@@ -529,12 +529,11 @@ define i1 @src_is_notmask_lshr_shl(i8 %x_in, i8 %y) {
529
529
530
530
define i1 @src_is_notmask_lshr_shl_fail_mismatch_shifts (i8 %x_in , i8 %y , i8 %z ) {
531
531
; CHECK-LABEL: @src_is_notmask_lshr_shl_fail_mismatch_shifts(
532
- ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X_IN:%.*]], 123
533
532
; CHECK-NEXT: [[MASK_SHR:%.*]] = lshr i8 -1, [[Y:%.*]]
534
533
; CHECK-NEXT: [[NMASK:%.*]] = shl i8 [[MASK_SHR]], [[Z:%.*]]
535
- ; CHECK-NEXT: [[MASK :%.*]] = xor i8 [[NMASK ]], -1
536
- ; CHECK-NEXT: [[AND :%.*]] = and i8 [[X ]], [[MASK ]]
537
- ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AND ]], [[X]]
534
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[X_IN:%.* ]], 123
535
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i8 [[TMP1 ]], [[NMASK ]]
536
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[TMP2 ]], 0
538
537
; CHECK-NEXT: ret i1 [[R]]
539
538
;
540
539
%x = xor i8 %x_in , 123
0 commit comments