@@ -772,10 +772,9 @@ entry:
772
772
773
773
define i32 @test_sext (i32 %a , i32 %b ){
774
774
; CHECK-LABEL: @test_sext(
775
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 0
776
- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[CMP]] to i32
777
- ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[SEXT]], [[B:%.*]]
778
- ; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[ADD]], -1
775
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne i32 [[A:%.*]], 0
776
+ ; CHECK-NEXT: [[TMP2:%.*]] = sext i1 [[TMP1]] to i32
777
+ ; CHECK-NEXT: [[NOT:%.*]] = sub i32 [[TMP2]], [[B:%.*]]
779
778
; CHECK-NEXT: ret i32 [[NOT]]
780
779
;
781
780
%cmp = icmp eq i32 %a , 0
@@ -787,10 +786,9 @@ define i32 @test_sext(i32 %a, i32 %b){
787
786
788
787
define <2 x i32 > @test_sext_vec (<2 x i32 > %a , <2 x i32 > %b ){
789
788
; CHECK-LABEL: @test_sext_vec(
790
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], zeroinitializer
791
- ; CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i32>
792
- ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i32> [[SEXT]], [[B:%.*]]
793
- ; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i32> [[ADD]], <i32 -1, i32 -1>
789
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne <2 x i32> [[A:%.*]], zeroinitializer
790
+ ; CHECK-NEXT: [[TMP2:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
791
+ ; CHECK-NEXT: [[NOT:%.*]] = sub <2 x i32> [[TMP2]], [[B:%.*]]
794
792
; CHECK-NEXT: ret <2 x i32> [[NOT]]
795
793
;
796
794
%cmp = icmp eq <2 x i32 > %a , zeroinitializer
@@ -802,11 +800,10 @@ define <2 x i32> @test_sext_vec(<2 x i32> %a, <2 x i32> %b){
802
800
803
801
define i64 @test_zext_nneg (i32 %c1 , i64 %c2 , i64 %c3 ){
804
802
; CHECK-LABEL: @test_zext_nneg(
805
- ; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[C1:%.*]], -1
806
- ; CHECK-NEXT: [[CONV:%.*]] = zext nneg i32 [[NOT]] to i64
807
- ; CHECK-NEXT: [[ADD1:%.*]] = add i64 [[C2:%.*]], -5
808
- ; CHECK-NEXT: [[ADD2:%.*]] = add i64 [[CONV]], [[C3:%.*]]
809
- ; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[ADD1]], [[ADD2]]
803
+ ; CHECK-NEXT: [[DOTNEG:%.*]] = add i64 [[C2:%.*]], -4
804
+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[C1:%.*]] to i64
805
+ ; CHECK-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], [[C3:%.*]]
806
+ ; CHECK-NEXT: [[SUB:%.*]] = add i64 [[DOTNEG]], [[TMP2]]
810
807
; CHECK-NEXT: ret i64 [[SUB]]
811
808
;
812
809
%not = xor i32 %c1 , -1
@@ -819,11 +816,8 @@ define i64 @test_zext_nneg(i32 %c1, i64 %c2, i64 %c3){
819
816
820
817
define i8 @test_trunc (i8 %a ){
821
818
; CHECK-LABEL: @test_trunc(
822
- ; CHECK-NEXT: [[ZEXT:%.*]] = zext i8 [[A:%.*]] to i32
823
- ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[ZEXT]], -1
824
- ; CHECK-NEXT: [[SHR:%.*]] = ashr i32 [[SUB]], 31
825
- ; CHECK-NEXT: [[CONV:%.*]] = trunc i32 [[SHR]] to i8
826
- ; CHECK-NEXT: [[NOT:%.*]] = xor i8 [[CONV]], -1
819
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne i8 [[A:%.*]], 0
820
+ ; CHECK-NEXT: [[NOT:%.*]] = sext i1 [[TMP1]] to i8
827
821
; CHECK-NEXT: ret i8 [[NOT]]
828
822
;
829
823
%zext = zext i8 %a to i32
@@ -836,11 +830,8 @@ define i8 @test_trunc(i8 %a){
836
830
837
831
define <2 x i8 > @test_trunc_vec (<2 x i8 > %a ){
838
832
; CHECK-LABEL: @test_trunc_vec(
839
- ; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A:%.*]] to <2 x i32>
840
- ; CHECK-NEXT: [[SUB:%.*]] = add nsw <2 x i32> [[ZEXT]], <i32 -1, i32 -1>
841
- ; CHECK-NEXT: [[SHR:%.*]] = ashr <2 x i32> [[SUB]], <i32 31, i32 31>
842
- ; CHECK-NEXT: [[CONV:%.*]] = trunc <2 x i32> [[SHR]] to <2 x i8>
843
- ; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i8> [[CONV]], <i8 -1, i8 -1>
833
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne <2 x i8> [[A:%.*]], zeroinitializer
834
+ ; CHECK-NEXT: [[NOT:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i8>
844
835
; CHECK-NEXT: ret <2 x i8> [[NOT]]
845
836
;
846
837
%zext = zext <2 x i8 > %a to <2 x i32 >
0 commit comments