@@ -679,9 +679,10 @@ define float @test_pown_afn_nnan_ninf_f32(float %x, i32 %y) {
679
679
; CHECK-NEXT: [[__YEVEN:%.*]] = shl i32 [[Y]], 31
680
680
; CHECK-NEXT: [[TMP0:%.*]] = bitcast float [[X]] to i32
681
681
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and i32 [[__YEVEN]], [[TMP0]]
682
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast i32 [[__POW_SIGN]] to float
683
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call nnan ninf afn float @llvm.copysign.f32(float [[__EXP2]], float [[TMP1]])
684
- ; CHECK-NEXT: ret float [[__POW_SIGN1]]
682
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast float [[__EXP2]] to i32
683
+ ; CHECK-NEXT: [[TMP2:%.*]] = or disjoint i32 [[__POW_SIGN]], [[TMP1]]
684
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i32 [[TMP2]] to float
685
+ ; CHECK-NEXT: ret float [[TMP3]]
685
686
;
686
687
entry:
687
688
%call = tail call nnan ninf afn float @_Z4pownfi (float %x , i32 %y )
@@ -700,9 +701,10 @@ define <2 x float> @test_pown_afn_nnan_ninf_v2f32(<2 x float> %x, <2 x i32> %y)
700
701
; CHECK-NEXT: [[__YEVEN:%.*]] = shl <2 x i32> [[Y]], <i32 31, i32 31>
701
702
; CHECK-NEXT: [[TMP0:%.*]] = bitcast <2 x float> [[X]] to <2 x i32>
702
703
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and <2 x i32> [[__YEVEN]], [[TMP0]]
703
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[__POW_SIGN]] to <2 x float>
704
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call nnan ninf afn <2 x float> @llvm.copysign.v2f32(<2 x float> [[__EXP2]], <2 x float> [[TMP1]])
705
- ; CHECK-NEXT: ret <2 x float> [[__POW_SIGN1]]
704
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x float> [[__EXP2]] to <2 x i32>
705
+ ; CHECK-NEXT: [[TMP2:%.*]] = or disjoint <2 x i32> [[__POW_SIGN]], [[TMP1]]
706
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast <2 x i32> [[TMP2]] to <2 x float>
707
+ ; CHECK-NEXT: ret <2 x float> [[TMP3]]
706
708
;
707
709
entry:
708
710
%call = tail call nnan ninf afn <2 x float > @_Z4pownDv2_fDv2_i (<2 x float > %x , <2 x i32 > %y )
@@ -722,9 +724,10 @@ define double @test_pown_afn_nnan_ninf_f64(double %x, i32 %y) {
722
724
; CHECK-NEXT: [[__YEVEN:%.*]] = shl i64 [[__YTOU]], 63
723
725
; CHECK-NEXT: [[TMP0:%.*]] = bitcast double [[X]] to i64
724
726
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and i64 [[__YEVEN]], [[TMP0]]
725
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast i64 [[__POW_SIGN]] to double
726
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call nnan ninf afn double @llvm.copysign.f64(double [[__EXP2]], double [[TMP1]])
727
- ; CHECK-NEXT: ret double [[__POW_SIGN1]]
727
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast double [[__EXP2]] to i64
728
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i64 [[__POW_SIGN]], [[TMP1]]
729
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i64 [[TMP2]] to double
730
+ ; CHECK-NEXT: ret double [[TMP3]]
728
731
;
729
732
entry:
730
733
%call = tail call nnan ninf afn double @_Z4powndi (double %x , i32 %y )
@@ -744,9 +747,10 @@ define <2 x double> @test_pown_afn_nnan_ninf_v2f64(<2 x double> %x, <2 x i32> %y
744
747
; CHECK-NEXT: [[__YEVEN:%.*]] = shl <2 x i64> [[__YTOU]], <i64 63, i64 63>
745
748
; CHECK-NEXT: [[TMP0:%.*]] = bitcast <2 x double> [[X]] to <2 x i64>
746
749
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and <2 x i64> [[__YEVEN]], [[TMP0]]
747
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i64> [[__POW_SIGN]] to <2 x double>
748
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call nnan ninf afn <2 x double> @llvm.copysign.v2f64(<2 x double> [[__EXP2]], <2 x double> [[TMP1]])
749
- ; CHECK-NEXT: ret <2 x double> [[__POW_SIGN1]]
750
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x double> [[__EXP2]] to <2 x i64>
751
+ ; CHECK-NEXT: [[TMP2:%.*]] = or <2 x i64> [[__POW_SIGN]], [[TMP1]]
752
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast <2 x i64> [[TMP2]] to <2 x double>
753
+ ; CHECK-NEXT: ret <2 x double> [[TMP3]]
750
754
;
751
755
entry:
752
756
%call = tail call nnan ninf afn <2 x double > @_Z4pownDv2_dDv2_i (<2 x double > %x , <2 x i32 > %y )
@@ -766,9 +770,10 @@ define half @test_pown_afn_nnan_ninf_f16(half %x, i32 %y) {
766
770
; CHECK-NEXT: [[__YEVEN:%.*]] = shl i16 [[__YTOU]], 15
767
771
; CHECK-NEXT: [[TMP0:%.*]] = bitcast half [[X]] to i16
768
772
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and i16 [[__YEVEN]], [[TMP0]]
769
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast i16 [[__POW_SIGN]] to half
770
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call nnan ninf afn half @llvm.copysign.f16(half [[__EXP2]], half [[TMP1]])
771
- ; CHECK-NEXT: ret half [[__POW_SIGN1]]
773
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast half [[__EXP2]] to i16
774
+ ; CHECK-NEXT: [[TMP2:%.*]] = or disjoint i16 [[__POW_SIGN]], [[TMP1]]
775
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i16 [[TMP2]] to half
776
+ ; CHECK-NEXT: ret half [[TMP3]]
772
777
;
773
778
entry:
774
779
%call = tail call nnan ninf afn half @_Z4pownDhi (half %x , i32 %y )
@@ -788,9 +793,10 @@ define <2 x half> @test_pown_afn_nnan_ninf_v2f16(<2 x half> %x, <2 x i32> %y) {
788
793
; CHECK-NEXT: [[__YEVEN:%.*]] = shl <2 x i16> [[__YTOU]], <i16 15, i16 15>
789
794
; CHECK-NEXT: [[TMP0:%.*]] = bitcast <2 x half> [[X]] to <2 x i16>
790
795
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and <2 x i16> [[__YEVEN]], [[TMP0]]
791
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i16> [[__POW_SIGN]] to <2 x half>
792
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call nnan ninf afn <2 x half> @llvm.copysign.v2f16(<2 x half> [[__EXP2]], <2 x half> [[TMP1]])
793
- ; CHECK-NEXT: ret <2 x half> [[__POW_SIGN1]]
796
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x half> [[__EXP2]] to <2 x i16>
797
+ ; CHECK-NEXT: [[TMP2:%.*]] = or disjoint <2 x i16> [[__POW_SIGN]], [[TMP1]]
798
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast <2 x i16> [[TMP2]] to <2 x half>
799
+ ; CHECK-NEXT: ret <2 x half> [[TMP3]]
794
800
;
795
801
entry:
796
802
%call = tail call nnan ninf afn <2 x half > @_Z4pownDv2_DhDv2_i (<2 x half > %x , <2 x i32 > %y )
@@ -821,9 +827,10 @@ define float @test_pown_fast_f32_strictfp(float %x, i32 %y) #1 {
821
827
; CHECK-NEXT: [[__YEVEN:%.*]] = shl i32 [[Y]], 31
822
828
; CHECK-NEXT: [[TMP0:%.*]] = bitcast float [[X]] to i32
823
829
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and i32 [[__YEVEN]], [[TMP0]]
824
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast i32 [[__POW_SIGN]] to float
825
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call fast float @llvm.copysign.f32(float [[__EXP2]], float [[TMP1]]) #[[ATTR0]]
826
- ; CHECK-NEXT: ret float [[__POW_SIGN1]]
830
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast float [[__EXP2]] to i32
831
+ ; CHECK-NEXT: [[TMP2:%.*]] = or disjoint i32 [[__POW_SIGN]], [[TMP1]]
832
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i32 [[TMP2]] to float
833
+ ; CHECK-NEXT: ret float [[TMP3]]
827
834
;
828
835
entry:
829
836
%call = tail call fast float @_Z4pownfi (float %x , i32 %y ) #1
@@ -833,8 +840,7 @@ entry:
833
840
define float @test_pown_fast_f32__y_poison (float %x ) {
834
841
; CHECK-LABEL: define float @test_pown_fast_f32__y_poison
835
842
; CHECK-SAME: (float [[X:%.*]]) {
836
- ; CHECK-NEXT: [[__EXP2:%.*]] = call fast float @llvm.exp2.f32(float poison)
837
- ; CHECK-NEXT: ret float [[__EXP2]]
843
+ ; CHECK-NEXT: ret float poison
838
844
;
839
845
%call = tail call fast float @_Z4pownfi (float %x , i32 poison)
840
846
ret float %call
@@ -1067,9 +1073,10 @@ define float @test_pown_afn_ninf_nnan_f32__x_known_positive(float nofpclass(ninf
1067
1073
; CHECK-NEXT: [[__YEVEN:%.*]] = shl i32 [[Y]], 31
1068
1074
; CHECK-NEXT: [[TMP0:%.*]] = bitcast float [[X]] to i32
1069
1075
; CHECK-NEXT: [[__POW_SIGN:%.*]] = and i32 [[__YEVEN]], [[TMP0]]
1070
- ; CHECK-NEXT: [[TMP1:%.*]] = bitcast i32 [[__POW_SIGN]] to float
1071
- ; CHECK-NEXT: [[__POW_SIGN1:%.*]] = call nnan ninf afn float @llvm.copysign.f32(float [[__EXP2]], float [[TMP1]])
1072
- ; CHECK-NEXT: ret float [[__POW_SIGN1]]
1076
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast float [[__EXP2]] to i32
1077
+ ; CHECK-NEXT: [[TMP2:%.*]] = or disjoint i32 [[__POW_SIGN]], [[TMP1]]
1078
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i32 [[TMP2]] to float
1079
+ ; CHECK-NEXT: ret float [[TMP3]]
1073
1080
;
1074
1081
entry:
1075
1082
%call = tail call afn ninf nnan float @_Z4pownfi (float %x , i32 %y )
0 commit comments