diff options
| author | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2016-11-17 04:00:46 +0000 |
|---|---|---|
| committer | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2016-11-17 04:00:46 +0000 |
| commit | 3f0cdc7a11b30d67fa9e66d318c760c4434bd74e (patch) | |
| tree | f16fc9ab73bd06ebcef6c387eca3870de3220f4a /llvm/lib/Target | |
| parent | 0ee25a6973fa49dec89c2ebfa67f3648865562d8 (diff) | |
| download | bcm5719-llvm-3f0cdc7a11b30d67fa9e66d318c760c4434bd74e.tar.gz bcm5719-llvm-3f0cdc7a11b30d67fa9e66d318c760c4434bd74e.zip | |
[AMDGPU] Promote f16/i16 conversions to f32/i32
llvm-svn: 287201
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 60 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.h | 6 |
2 files changed, 8 insertions, 58 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index 1f90505ca1a..b72415b9e90 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -270,10 +270,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM, setOperationAction(ISD::FP_TO_FP16, MVT::i16, Promote); AddPromotedToType(ISD::FP_TO_FP16, MVT::i16, MVT::i32); - setOperationAction(ISD::FP_TO_SINT, MVT::i16, Custom); - setOperationAction(ISD::FP_TO_UINT, MVT::i16, Custom); - setOperationAction(ISD::SINT_TO_FP, MVT::i16, Custom); - setOperationAction(ISD::UINT_TO_FP, MVT::i16, Custom); + setOperationAction(ISD::FP_TO_SINT, MVT::i16, Promote); + setOperationAction(ISD::FP_TO_UINT, MVT::i16, Promote); + setOperationAction(ISD::SINT_TO_FP, MVT::i16, Promote); + setOperationAction(ISD::UINT_TO_FP, MVT::i16, Promote); // F16 - Constant Actions. setOperationAction(ISD::ConstantFP, MVT::f16, Custom); @@ -287,6 +287,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM, // F16 - VOP1 Actions. setOperationAction(ISD::FCOS, MVT::f16, Promote); setOperationAction(ISD::FSIN, MVT::f16, Promote); + setOperationAction(ISD::FP_TO_SINT, MVT::f16, Promote); + setOperationAction(ISD::FP_TO_UINT, MVT::f16, Promote); + setOperationAction(ISD::SINT_TO_FP, MVT::f16, Promote); + setOperationAction(ISD::UINT_TO_FP, MVT::f16, Promote); // F16 - VOP2 Actions. setOperationAction(ISD::BR_CC, MVT::f16, Expand); @@ -1828,12 +1832,6 @@ SDValue SITargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const { case ISD::ConstantFP: return lowerConstantFP(Op, DAG); - case ISD::FP_TO_SINT: - case ISD::FP_TO_UINT: - return lowerFpToInt(Op, DAG); - case ISD::SINT_TO_FP: - case ISD::UINT_TO_FP: - return lowerIntToFp(Op, DAG); } return SDValue(); } @@ -2045,48 +2043,6 @@ SDValue SITargetLowering::lowerConstantFP(SDValue Op, SelectionDAG &DAG) const { return SDValue(); } -SDValue SITargetLowering::lowerFpToInt(SDValue Op, SelectionDAG &DAG) const { - EVT DstVT = Op.getValueType(); - EVT SrcVT = Op.getOperand(0).getValueType(); - if (DstVT == MVT::i64) { - return Op.getOpcode() == ISD::FP_TO_SINT ? - AMDGPUTargetLowering::LowerFP_TO_SINT(Op, DAG) : - AMDGPUTargetLowering::LowerFP_TO_UINT(Op, DAG); - } - - if (SrcVT == MVT::f16) - return Op; - - SDLoc DL(Op); - SDValue OrigSrc = Op.getOperand(0); - SDValue FPRoundFlag = DAG.getIntPtrConstant(0, DL); - SDValue FPRoundSrc = - DAG.getNode(ISD::FP_ROUND, DL, MVT::f16, OrigSrc, FPRoundFlag); - - return DAG.getNode(Op.getOpcode(), DL, DstVT, FPRoundSrc); -} - -SDValue SITargetLowering::lowerIntToFp(SDValue Op, SelectionDAG &DAG) const { - EVT DstVT = Op.getValueType(); - EVT SrcVT = Op.getOperand(0).getValueType(); - if (SrcVT == MVT::i64) { - return Op.getOpcode() == ISD::SINT_TO_FP ? - AMDGPUTargetLowering::LowerSINT_TO_FP(Op, DAG) : - AMDGPUTargetLowering::LowerUINT_TO_FP(Op, DAG); - } - - if (DstVT == MVT::f16) - return Op; - - SDLoc DL(Op); - SDValue OrigSrc = Op.getOperand(0); - SDValue SExtOrZExtOrTruncSrc = Op.getOpcode() == ISD::SINT_TO_FP ? - DAG.getSExtOrTrunc(OrigSrc, DL, MVT::i32) : - DAG.getZExtOrTrunc(OrigSrc, DL, MVT::i32); - - return DAG.getNode(Op.getOpcode(), DL, DstVT, SExtOrZExtOrTruncSrc); -} - SDValue SITargetLowering::getSegmentAperture(unsigned AS, SelectionDAG &DAG) const { SDLoc SL; diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.h b/llvm/lib/Target/AMDGPU/SIISelLowering.h index 32a3267f3c1..2cbfe11a76b 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.h +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.h @@ -56,12 +56,6 @@ class SITargetLowering final : public AMDGPUTargetLowering { /// \brief Custom lowering for ISD::ConstantFP. SDValue lowerConstantFP(SDValue Op, SelectionDAG &DAG) const; - /// \brief Custom lowering for ISD::FP_TO_SINT, ISD::FP_TO_UINT. - SDValue lowerFpToInt(SDValue Op, SelectionDAG &DAG) const; - - /// \brief Custom lowering for ISD::SINT_TO_FP, ISD::UINT_TO_FP. - SDValue lowerIntToFp(SDValue Op, SelectionDAG &DAG) const; - SDValue getSegmentAperture(unsigned AS, SelectionDAG &DAG) const; SDValue lowerADDRSPACECAST(SDValue Op, SelectionDAG &DAG) const; SDValue lowerTRAP(SDValue Op, SelectionDAG &DAG) const; |

