diff options
author | Tim Northover <tnorthover@apple.com> | 2014-04-18 13:16:42 +0000 |
---|---|---|
committer | Tim Northover <tnorthover@apple.com> | 2014-04-18 13:16:42 +0000 |
commit | e3028832d14bd1fed7cdf9d2ff96e4256112d91c (patch) | |
tree | 1096949abfbd7acd80bd575fc230cf124d94b34e /llvm/lib | |
parent | 0491afaf5f6e664eb11949ace40ad5e783c66e12 (diff) | |
download | llvm-e3028832d14bd1fed7cdf9d2ff96e4256112d91c.zip llvm-e3028832d14bd1fed7cdf9d2ff96e4256112d91c.tar.gz llvm-e3028832d14bd1fed7cdf9d2ff96e4256112d91c.tar.bz2 |
AArch64/ARM64: add non-scalar lowering for more FCVT operations.
llvm-svn: 206591
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/ARM64/ARM64ISelLowering.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/Target/ARM64/ARM64TargetTransformInfo.cpp | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp b/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp index 503e44b..6df2122 100644 --- a/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp +++ b/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp @@ -1313,10 +1313,16 @@ static SDValue LowerVectorFP_TO_INT(SDValue Op, SelectionDAG &DAG) { if (VT.getSizeInBits() == InVT.getSizeInBits()) return Op; - if (InVT == MVT::v2f64) { + if (InVT == MVT::v2f64 || InVT == MVT::v4f32) { SDLoc dl(Op); - SDValue Cv = DAG.getNode(Op.getOpcode(), dl, MVT::v2i64, Op.getOperand(0)); + SDValue Cv = + DAG.getNode(Op.getOpcode(), dl, InVT.changeVectorElementTypeToInteger(), + Op.getOperand(0)); return DAG.getNode(ISD::TRUNCATE, dl, VT, Cv); + } else if (InVT == MVT::v2f32) { + SDLoc dl(Op); + SDValue Ext = DAG.getNode(ISD::FP_EXTEND, dl, MVT::v2f64, Op.getOperand(0)); + return DAG.getNode(Op.getOpcode(), dl, VT, Ext); } // Type changing conversions are illegal. diff --git a/llvm/lib/Target/ARM64/ARM64TargetTransformInfo.cpp b/llvm/lib/Target/ARM64/ARM64TargetTransformInfo.cpp index 372900e..d5e8213d 100644 --- a/llvm/lib/Target/ARM64/ARM64TargetTransformInfo.cpp +++ b/llvm/lib/Target/ARM64/ARM64TargetTransformInfo.cpp @@ -316,6 +316,10 @@ unsigned ARM64TTI::getCastInstrCost(unsigned Opcode, Type *Dst, { ISD::FP_TO_UINT, MVT::v2i64, MVT::v2f64, 1 }, { ISD::FP_TO_UINT, MVT::v2i32, MVT::v2f64, 1 }, { ISD::FP_TO_SINT, MVT::v2i32, MVT::v2f64, 1 }, + { ISD::FP_TO_UINT, MVT::v2i64, MVT::v2f32, 4 }, + { ISD::FP_TO_SINT, MVT::v2i64, MVT::v2f32, 4 }, + { ISD::FP_TO_UINT, MVT::v4i16, MVT::v4f32, 4 }, + { ISD::FP_TO_SINT, MVT::v4i16, MVT::v4f32, 4 }, { ISD::FP_TO_UINT, MVT::v2i64, MVT::v2f64, 4 }, { ISD::FP_TO_SINT, MVT::v2i64, MVT::v2f64, 4 }, }; |