forked from OSchip/llvm-project
parent
8b98515c29
commit
4208cace5f
|
@ -1894,6 +1894,17 @@ let Predicates = [HasAVX] in {
|
|||
sse1_fp_unop_p_int<0x53, "vrcp", int_x86_sse_rcp_ps>, VEX;
|
||||
}
|
||||
|
||||
def : Pat<(f32 (fsqrt FR32:$src)),
|
||||
(VSQRTSSr (f32 (IMPLICIT_DEF)), FR32:$src)>, Requires<[HasAVX]>;
|
||||
def : Pat<(f64 (fsqrt FR64:$src)),
|
||||
(VSQRTSDr (f64 (IMPLICIT_DEF)), FR64:$src)>, Requires<[HasAVX]>;
|
||||
def : Pat<(f64 (fsqrt (load addr:$src))),
|
||||
(VSQRTSDm (f64 (IMPLICIT_DEF)), addr:$src)>,
|
||||
Requires<[HasAVX, OptForSize]>;
|
||||
def : Pat<(f32 (fsqrt (load addr:$src))),
|
||||
(VSQRTSSm (f32 (IMPLICIT_DEF)), addr:$src)>,
|
||||
Requires<[HasAVX, OptForSize]>;
|
||||
|
||||
// Square root.
|
||||
defm SQRT : sse1_fp_unop_s<0x51, "sqrt", fsqrt, int_x86_sse_sqrt_ss>,
|
||||
sse1_fp_unop_p<0x51, "sqrt", fsqrt>,
|
||||
|
|
|
@ -52,3 +52,21 @@ entry:
|
|||
%conv = sitofp i64 %tmp1 to float
|
||||
ret float %conv
|
||||
}
|
||||
|
||||
; CHECK: vsqrtss
|
||||
define float @sqrtA(float %a) nounwind uwtable readnone ssp {
|
||||
entry:
|
||||
%conv1 = tail call float @sqrtf(float %a) nounwind readnone
|
||||
ret float %conv1
|
||||
}
|
||||
|
||||
declare double @sqrt(double) readnone
|
||||
|
||||
; CHECK: vsqrtsd
|
||||
define double @sqrtB(double %a) nounwind uwtable readnone ssp {
|
||||
entry:
|
||||
%call = tail call double @sqrt(double %a) nounwind readnone
|
||||
ret double %call
|
||||
}
|
||||
|
||||
declare float @sqrtf(float) readnone
|
||||
|
|
Loading…
Reference in New Issue