summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-11-17 04:00:46 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-11-17 04:00:46 +0000
commit3f0cdc7a11b30d67fa9e66d318c760c4434bd74e (patch)
treef16fc9ab73bd06ebcef6c387eca3870de3220f4a /llvm/lib/Target
parent0ee25a6973fa49dec89c2ebfa67f3648865562d8 (diff)
downloadbcm5719-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.cpp60
-rw-r--r--llvm/lib/Target/AMDGPU/SIISelLowering.h6
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;
OpenPOWER on IntegriCloud