X86: Promote sitofp <8 x i16> to <8 x i32> when AVX is available.

A vector sext + sitofp is a lot cheaper than 8 scalar conversions.

llvm-svn: 178448
This commit is contained in:
Benjamin Kramer 2013-03-31 12:49:15 +00:00
parent beb296bea1
commit b60633fb87
2 changed files with 7 additions and 0 deletions

View File

@ -1111,6 +1111,7 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
setOperationAction(ISD::FP_TO_SINT, MVT::v8i16, Custom); setOperationAction(ISD::FP_TO_SINT, MVT::v8i16, Custom);
setOperationAction(ISD::FP_TO_SINT, MVT::v8i32, Legal); setOperationAction(ISD::FP_TO_SINT, MVT::v8i32, Legal);
setOperationAction(ISD::SINT_TO_FP, MVT::v8i16, Promote);
setOperationAction(ISD::SINT_TO_FP, MVT::v8i32, Legal); setOperationAction(ISD::SINT_TO_FP, MVT::v8i32, Legal);
setOperationAction(ISD::FP_ROUND, MVT::v4f32, Legal); setOperationAction(ISD::FP_ROUND, MVT::v4f32, Legal);

View File

@ -18,6 +18,12 @@ define <4 x double> @sitofp01(<4 x i32> %a) {
ret <4 x double> %b ret <4 x double> %b
} }
; CHECK: vcvtdq2ps %ymm
define <8 x float> @sitofp02(<8 x i16> %a) {
%b = sitofp <8 x i16> %a to <8 x float>
ret <8 x float> %b
}
; CHECK: vcvttpd2dqy %ymm ; CHECK: vcvttpd2dqy %ymm
define <4 x i32> @fptosi01(<4 x double> %a) { define <4 x i32> @fptosi01(<4 x double> %a) {
%b = fptosi <4 x double> %a to <4 x i32> %b = fptosi <4 x double> %a to <4 x i32>