@@ -391,9 +391,8 @@ define i32 @test15e_extra_use(i32 %X) {
391
391
;; (a & 128) ? 256 : 0
392
392
define i32 @test15e_zext (i8 %X ) {
393
393
; CHECK-LABEL: @test15e_zext(
394
- ; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[X:%.*]], -128
395
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
396
- ; CHECK-NEXT: [[T3:%.*]] = shl nuw nsw i32 [[TMP2]], 1
394
+ ; CHECK-NEXT: [[T2_NOT:%.*]] = icmp sgt i8 [[X:%.*]], -1
395
+ ; CHECK-NEXT: [[T3:%.*]] = select i1 [[T2_NOT]], i32 0, i32 256
397
396
; CHECK-NEXT: ret i32 [[T3]]
398
397
;
399
398
%t1 = and i8 %X , 128
@@ -406,9 +405,7 @@ define i32 @test15e_zext(i8 %X) {
406
405
define i32 @test15e_zext_extra_use (i8 %X ) {
407
406
; CHECK-LABEL: @test15e_zext_extra_use(
408
407
; CHECK-NEXT: [[T2:%.*]] = icmp slt i8 [[X:%.*]], 0
409
- ; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[X]], -128
410
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
411
- ; CHECK-NEXT: [[T3:%.*]] = shl nuw nsw i32 [[TMP2]], 1
408
+ ; CHECK-NEXT: [[T3:%.*]] = select i1 [[T2]], i32 256, i32 0
412
409
; CHECK-NEXT: call void @use1(i1 [[T2]])
413
410
; CHECK-NEXT: ret i32 [[T3]]
414
411
;
@@ -438,8 +435,7 @@ define i32 @test15f_extra_use(i32 %X) {
438
435
; CHECK-LABEL: @test15f_extra_use(
439
436
; CHECK-NEXT: [[T1:%.*]] = and i32 [[X:%.*]], 128
440
437
; CHECK-NEXT: [[T2:%.*]] = icmp ne i32 [[T1]], 0
441
- ; CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i32 [[T1]], 1
442
- ; CHECK-NEXT: [[T3:%.*]] = xor i32 [[TMP1]], 256
438
+ ; CHECK-NEXT: [[T3:%.*]] = select i1 [[T2]], i32 0, i32 256
443
439
; CHECK-NEXT: call void @use1(i1 [[T2]])
444
440
; CHECK-NEXT: ret i32 [[T3]]
445
441
;
@@ -453,10 +449,9 @@ define i32 @test15f_extra_use(i32 %X) {
453
449
;; (a & 128) ? 0 : 256
454
450
define i16 @test15f_trunc (i32 %X ) {
455
451
; CHECK-LABEL: @test15f_trunc(
456
- ; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[X:%.*]] to i16
457
- ; CHECK-NEXT: [[TMP2:%.*]] = shl i16 [[TMP1]], 1
458
- ; CHECK-NEXT: [[TMP3:%.*]] = and i16 [[TMP2]], 256
459
- ; CHECK-NEXT: [[T3:%.*]] = xor i16 [[TMP3]], 256
452
+ ; CHECK-NEXT: [[T1:%.*]] = and i32 [[X:%.*]], 128
453
+ ; CHECK-NEXT: [[T2_NOT:%.*]] = icmp eq i32 [[T1]], 0
454
+ ; CHECK-NEXT: [[T3:%.*]] = select i1 [[T2_NOT]], i16 256, i16 0
460
455
; CHECK-NEXT: ret i16 [[T3]]
461
456
;
462
457
%t1 = and i32 %X , 128
@@ -799,7 +794,9 @@ define i8 @select_bittest_to_xor(i8 %x) {
799
794
; CHECK-LABEL: @select_bittest_to_xor(
800
795
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], -1
801
796
; CHECK-NEXT: call void @use1(i1 [[CMP]])
802
- ; CHECK-NEXT: [[MASKSEL:%.*]] = xor i8 [[X]], -128
797
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], 127
798
+ ; CHECK-NEXT: [[MASKSEL1:%.*]] = select i1 [[CMP]], i8 -128, i8 0
799
+ ; CHECK-NEXT: [[MASKSEL:%.*]] = or disjoint i8 [[AND]], [[MASKSEL1]]
803
800
; CHECK-NEXT: ret i8 [[MASKSEL]]
804
801
;
805
802
%cmp = icmp sgt i8 %x , -1
0 commit comments