@@ -16,8 +16,8 @@ declare i16 @llvm.umax.i16(i16, i16)
16
16
define i32 @pr25900 (i32 %d ) {
17
17
; CHECK-LABEL: define i32 @pr25900
18
18
; CHECK-SAME: (i32 [[D:%.*]]) {
19
- ; CHECK-NEXT: [[AND :%.*]] = ashr i32 [[D]], 31
20
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 4, [[AND ]]
19
+ ; CHECK-NEXT: [[ASHR :%.*]] = ashr i32 [[D]], 31
20
+ ; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 4, [[ASHR ]]
21
21
; CHECK-NEXT: ret i32 [[DIV]]
22
22
;
23
23
%and = and i32 %d , -2147483648
@@ -37,7 +37,7 @@ define i8 @trunc_is_pow2_or_zero(i16 %x, i8 %y) {
37
37
; CHECK-NEXT: [[XP2:%.*]] = shl i16 4, [[X]]
38
38
; CHECK-NEXT: [[XX:%.*]] = trunc i16 [[XP2]] to i8
39
39
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[XX]], -1
40
- ; CHECK-NEXT: [[R:%.*]] = and i8 [[TMP1 ]], [[Y ]]
40
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[Y ]], [[TMP1 ]]
41
41
; CHECK-NEXT: ret i8 [[R]]
42
42
;
43
43
%xp2 = shl i16 4 , %x
@@ -67,7 +67,7 @@ define i1 @trunc_is_pow2_fail(i16 %x, i8 %y) {
67
67
; CHECK-SAME: (i16 [[X:%.*]], i8 [[Y:%.*]]) {
68
68
; CHECK-NEXT: [[XP2:%.*]] = shl i16 4, [[X]]
69
69
; CHECK-NEXT: [[XX:%.*]] = trunc i16 [[XP2]] to i8
70
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[XX ]], [[Y ]]
70
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[Y ]], [[XX ]]
71
71
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AND]], [[XX]]
72
72
; CHECK-NEXT: ret i1 [[R]]
73
73
;
@@ -85,7 +85,7 @@ define i16 @bswap_is_pow2_or_zero(i16 %x, i16 %y) {
85
85
; CHECK-NEXT: [[XP2:%.*]] = shl i16 4, [[X]]
86
86
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.bswap.i16(i16 [[XP2]])
87
87
; CHECK-NEXT: [[TMP1:%.*]] = add i16 [[XX]], -1
88
- ; CHECK-NEXT: [[R:%.*]] = and i16 [[TMP1 ]], [[Y ]]
88
+ ; CHECK-NEXT: [[R:%.*]] = and i16 [[Y ]], [[TMP1 ]]
89
89
; CHECK-NEXT: ret i16 [[R]]
90
90
;
91
91
%xp2 = shl i16 4 , %x
@@ -115,7 +115,7 @@ define i1 @bswap_is_pow2(i16 %x, i16 %y) {
115
115
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
116
116
; CHECK-NEXT: [[XP2:%.*]] = shl nuw i16 1, [[X]]
117
117
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.bswap.i16(i16 [[XP2]])
118
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
118
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
119
119
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
120
120
; CHECK-NEXT: ret i1 [[R]]
121
121
;
@@ -132,7 +132,7 @@ define i1 @bswap_is_pow2_fail(i16 %x, i16 %y) {
132
132
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
133
133
; CHECK-NEXT: [[XP2:%.*]] = shl i16 2, [[X]]
134
134
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.bswap.i16(i16 [[XP2]])
135
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
135
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
136
136
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
137
137
; CHECK-NEXT: ret i1 [[R]]
138
138
;
@@ -150,7 +150,7 @@ define i16 @bitreverse_is_pow2_or_zero(i16 %x, i16 %y) {
150
150
; CHECK-NEXT: [[XP2:%.*]] = shl i16 4, [[X]]
151
151
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.bitreverse.i16(i16 [[XP2]])
152
152
; CHECK-NEXT: [[TMP1:%.*]] = add nsw i16 [[XX]], -1
153
- ; CHECK-NEXT: [[R:%.*]] = and i16 [[TMP1 ]], [[Y ]]
153
+ ; CHECK-NEXT: [[R:%.*]] = and i16 [[Y ]], [[TMP1 ]]
154
154
; CHECK-NEXT: ret i16 [[R]]
155
155
;
156
156
%xp2 = shl i16 4 , %x
@@ -180,7 +180,7 @@ define i1 @bitreverse_is_pow2(i16 %x, i16 %y) {
180
180
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
181
181
; CHECK-NEXT: [[XP2:%.*]] = shl nuw i16 1, [[X]]
182
182
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.bitreverse.i16(i16 [[XP2]])
183
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
183
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
184
184
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
185
185
; CHECK-NEXT: ret i1 [[R]]
186
186
;
@@ -197,7 +197,7 @@ define i1 @bitreverse_is_pow2_fail(i16 %x, i16 %y) {
197
197
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
198
198
; CHECK-NEXT: [[XP2:%.*]] = shl i16 2, [[X]]
199
199
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.bitreverse.i16(i16 [[XP2]])
200
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
200
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
201
201
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
202
202
; CHECK-NEXT: ret i1 [[R]]
203
203
;
@@ -215,7 +215,7 @@ define i16 @fshl_is_pow2_or_zero(i16 %x, i16 %y, i16 %z) {
215
215
; CHECK-NEXT: [[XP2:%.*]] = shl i16 4, [[X]]
216
216
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.fshl.i16(i16 [[XP2]], i16 [[XP2]], i16 [[Z]])
217
217
; CHECK-NEXT: [[TMP1:%.*]] = add i16 [[XX]], -1
218
- ; CHECK-NEXT: [[R:%.*]] = and i16 [[TMP1 ]], [[Y ]]
218
+ ; CHECK-NEXT: [[R:%.*]] = and i16 [[Y ]], [[TMP1 ]]
219
219
; CHECK-NEXT: ret i16 [[R]]
220
220
;
221
221
%xp2 = shl i16 4 , %x
@@ -262,7 +262,7 @@ define i1 @fshl_is_pow2(i16 %x, i16 %y, i16 %z) {
262
262
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]], i16 [[Z:%.*]]) {
263
263
; CHECK-NEXT: [[XP2:%.*]] = shl nuw i16 1, [[X]]
264
264
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.fshl.i16(i16 [[XP2]], i16 [[XP2]], i16 [[Z]])
265
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
265
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
266
266
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
267
267
; CHECK-NEXT: ret i1 [[R]]
268
268
;
@@ -279,7 +279,7 @@ define i1 @fshl_is_pow2_fail(i16 %x, i16 %y, i16 %z) {
279
279
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]], i16 [[Z:%.*]]) {
280
280
; CHECK-NEXT: [[XP2:%.*]] = shl i16 2, [[X]]
281
281
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.fshl.i16(i16 [[XP2]], i16 [[XP2]], i16 [[Z]])
282
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
282
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
283
283
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
284
284
; CHECK-NEXT: ret i1 [[R]]
285
285
;
@@ -297,7 +297,7 @@ define i16 @fshr_is_pow2_or_zero(i16 %x, i16 %y, i16 %z) {
297
297
; CHECK-NEXT: [[XP2:%.*]] = shl i16 4, [[X]]
298
298
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.fshr.i16(i16 [[XP2]], i16 [[XP2]], i16 [[Z]])
299
299
; CHECK-NEXT: [[TMP1:%.*]] = add i16 [[XX]], -1
300
- ; CHECK-NEXT: [[R:%.*]] = and i16 [[TMP1 ]], [[Y ]]
300
+ ; CHECK-NEXT: [[R:%.*]] = and i16 [[Y ]], [[TMP1 ]]
301
301
; CHECK-NEXT: ret i16 [[R]]
302
302
;
303
303
%xp2 = shl i16 4 , %x
@@ -344,7 +344,7 @@ define i1 @fshr_is_pow2(i16 %x, i16 %y, i16 %z) {
344
344
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]], i16 [[Z:%.*]]) {
345
345
; CHECK-NEXT: [[XP2:%.*]] = shl nuw i16 1, [[X]]
346
346
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.fshr.i16(i16 [[XP2]], i16 [[XP2]], i16 [[Z]])
347
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
347
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
348
348
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
349
349
; CHECK-NEXT: ret i1 [[R]]
350
350
;
@@ -361,7 +361,7 @@ define i1 @fshr_is_pow2_fail(i16 %x, i16 %y, i16 %z) {
361
361
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]], i16 [[Z:%.*]]) {
362
362
; CHECK-NEXT: [[XP2:%.*]] = shl i16 2, [[X]]
363
363
; CHECK-NEXT: [[XX:%.*]] = call i16 @llvm.fshr.i16(i16 [[XP2]], i16 [[XP2]], i16 [[Z]])
364
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
364
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
365
365
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
366
366
; CHECK-NEXT: ret i1 [[R]]
367
367
;
@@ -380,7 +380,7 @@ define i16 @mul_is_pow2_or_zero(i16 %x, i16 %y, i16 %z) {
380
380
; CHECK-NEXT: [[ZP2:%.*]] = shl i16 2, [[Z]]
381
381
; CHECK-NEXT: [[XX:%.*]] = mul i16 [[XP2]], [[ZP2]]
382
382
; CHECK-NEXT: [[TMP1:%.*]] = add i16 [[XX]], -1
383
- ; CHECK-NEXT: [[R:%.*]] = and i16 [[TMP1 ]], [[Y ]]
383
+ ; CHECK-NEXT: [[R:%.*]] = and i16 [[Y ]], [[TMP1 ]]
384
384
; CHECK-NEXT: ret i16 [[R]]
385
385
;
386
386
%xp2 = shl i16 4 , %x
@@ -416,7 +416,7 @@ define i1 @mul_is_pow2(i16 %x, i16 %y, i16 %z) {
416
416
; CHECK-NEXT: [[ZP2:%.*]] = shl nuw nsw i16 2, [[ZSMALL]]
417
417
; CHECK-NEXT: [[TMP1:%.*]] = add nuw nsw i16 [[XSMALL]], 2
418
418
; CHECK-NEXT: [[XX:%.*]] = shl nuw nsw i16 [[ZP2]], [[TMP1]]
419
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
419
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
420
420
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
421
421
; CHECK-NEXT: ret i1 [[R]]
422
422
;
@@ -439,7 +439,7 @@ define i1 @mul_is_pow2_fail(i16 %x, i16 %y, i16 %z) {
439
439
; CHECK-NEXT: [[ZP2:%.*]] = shl nuw nsw i16 2, [[ZSMALL]]
440
440
; CHECK-NEXT: [[TMP1:%.*]] = add nuw nsw i16 [[XSMALL]], 2
441
441
; CHECK-NEXT: [[XX:%.*]] = shl i16 [[ZP2]], [[TMP1]]
442
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
442
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
443
443
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
444
444
; CHECK-NEXT: ret i1 [[R]]
445
445
;
@@ -462,7 +462,7 @@ define i1 @mul_is_pow2_fail2(i16 %x, i16 %y, i16 %z) {
462
462
; CHECK-NEXT: [[XP2:%.*]] = shl nuw nsw i16 3, [[XSMALL]]
463
463
; CHECK-NEXT: [[TMP1:%.*]] = add nuw nsw i16 [[ZSMALL]], 1
464
464
; CHECK-NEXT: [[XX:%.*]] = shl nuw nsw i16 [[XP2]], [[TMP1]]
465
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
465
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
466
466
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
467
467
; CHECK-NEXT: ret i1 [[R]]
468
468
;
@@ -482,7 +482,7 @@ define i1 @shl_is_pow2(i16 %x, i16 %y) {
482
482
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
483
483
; CHECK-NEXT: [[XSMALL:%.*]] = and i16 [[X]], 7
484
484
; CHECK-NEXT: [[XX:%.*]] = shl nuw nsw i16 4, [[XSMALL]]
485
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
485
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
486
486
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
487
487
; CHECK-NEXT: ret i1 [[R]]
488
488
;
@@ -499,7 +499,7 @@ define i1 @shl_is_pow2_fail(i16 %x, i16 %y) {
499
499
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
500
500
; CHECK-NEXT: [[XSMALL:%.*]] = and i16 [[X]], 7
501
501
; CHECK-NEXT: [[XX:%.*]] = shl i16 512, [[XSMALL]]
502
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
502
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
503
503
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
504
504
; CHECK-NEXT: ret i1 [[R]]
505
505
;
@@ -516,7 +516,7 @@ define i1 @shl_is_pow2_fail2(i16 %x, i16 %y) {
516
516
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
517
517
; CHECK-NEXT: [[XSMALL:%.*]] = and i16 [[X]], 7
518
518
; CHECK-NEXT: [[XX:%.*]] = shl nuw nsw i16 5, [[XSMALL]]
519
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
519
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
520
520
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
521
521
; CHECK-NEXT: ret i1 [[R]]
522
522
;
@@ -533,7 +533,7 @@ define i1 @lshr_is_pow2(i16 %x, i16 %y) {
533
533
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
534
534
; CHECK-NEXT: [[XSMALL:%.*]] = and i16 [[X]], 7
535
535
; CHECK-NEXT: [[XX:%.*]] = lshr exact i16 512, [[XSMALL]]
536
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
536
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
537
537
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
538
538
; CHECK-NEXT: ret i1 [[R]]
539
539
;
@@ -550,7 +550,7 @@ define i1 @lshr_is_pow2_fail(i16 %x, i16 %y) {
550
550
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
551
551
; CHECK-NEXT: [[XSMALL:%.*]] = and i16 [[X]], 7
552
552
; CHECK-NEXT: [[XX:%.*]] = lshr i16 4, [[XSMALL]]
553
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
553
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
554
554
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
555
555
; CHECK-NEXT: ret i1 [[R]]
556
556
;
@@ -567,7 +567,7 @@ define i1 @lshr_is_pow2_fail2(i16 %x, i16 %y) {
567
567
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
568
568
; CHECK-NEXT: [[XSMALL:%.*]] = and i16 [[X]], 7
569
569
; CHECK-NEXT: [[XX:%.*]] = lshr i16 513, [[XSMALL]]
570
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
570
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
571
571
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
572
572
; CHECK-NEXT: ret i1 [[R]]
573
573
;
@@ -584,7 +584,7 @@ define i1 @and_is_pow2(i16 %x, i16 %y) {
584
584
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
585
585
; CHECK-NEXT: [[XNZ:%.*]] = or i16 [[X]], 4
586
586
; CHECK-NEXT: [[X_NEG:%.*]] = sub nsw i16 0, [[XNZ]]
587
- ; CHECK-NEXT: [[TMP1:%.*]] = and i16 [[X_NEG ]], [[Y ]]
587
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i16 [[Y ]], [[X_NEG ]]
588
588
; CHECK-NEXT: [[AND:%.*]] = and i16 [[TMP1]], [[XNZ]]
589
589
; CHECK-NEXT: [[R:%.*]] = icmp ne i16 [[AND]], 0
590
590
; CHECK-NEXT: ret i1 [[R]]
@@ -602,8 +602,8 @@ define i1 @and_is_pow2_fail(i16 %x, i16 %y) {
602
602
; CHECK-LABEL: define i1 @and_is_pow2_fail
603
603
; CHECK-SAME: (i16 [[X:%.*]], i16 [[Y:%.*]]) {
604
604
; CHECK-NEXT: [[X_NEG:%.*]] = sub i16 0, [[X]]
605
- ; CHECK-NEXT: [[XX:%.*]] = and i16 [[X_NEG ]], [[X ]]
606
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[XX ]], [[Y ]]
605
+ ; CHECK-NEXT: [[XX:%.*]] = and i16 [[X ]], [[X_NEG ]]
606
+ ; CHECK-NEXT: [[AND:%.*]] = and i16 [[Y ]], [[XX ]]
607
607
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[AND]], [[XX]]
608
608
; CHECK-NEXT: ret i1 [[R]]
609
609
;
@@ -619,7 +619,7 @@ define i16 @i1_is_pow2_or_zero(i1 %x, i16 %y) {
619
619
; CHECK-LABEL: define i16 @i1_is_pow2_or_zero
620
620
; CHECK-SAME: (i1 [[X:%.*]], i16 [[Y:%.*]]) {
621
621
; CHECK-NEXT: [[XX:%.*]] = zext i1 [[X]] to i16
622
- ; CHECK-NEXT: [[R:%.*]] = or i16 [[XX ]], [[Y ]]
622
+ ; CHECK-NEXT: [[R:%.*]] = or i16 [[Y ]], [[XX ]]
623
623
; CHECK-NEXT: ret i16 [[R]]
624
624
;
625
625
%xx = zext i1 %x to i16
0 commit comments