@@ -1668,14 +1668,18 @@ const char *PPCTargetLowering::getTargetNodeName(unsigned Opcode) const {
16681668 case PPCISD::FSEL: return "PPCISD::FSEL";
16691669 case PPCISD::XSMAXC: return "PPCISD::XSMAXC";
16701670 case PPCISD::XSMINC: return "PPCISD::XSMINC";
1671- case PPCISD::FCFID: return "PPCISD::FCFID";
1672- case PPCISD::FCFIDU: return "PPCISD::FCFIDU";
1673- case PPCISD::FCFIDS: return "PPCISD::FCFIDS";
1674- case PPCISD::FCFIDUS: return "PPCISD::FCFIDUS";
1675- case PPCISD::FCTIDZ: return "PPCISD::FCTIDZ";
1676- case PPCISD::FCTIWZ: return "PPCISD::FCTIWZ";
1677- case PPCISD::FCTIDUZ: return "PPCISD::FCTIDUZ";
1678- case PPCISD::FCTIWUZ: return "PPCISD::FCTIWUZ";
1671+ case PPCISD::SINT_TO_FP_INREG:
1672+ return "PPCISD::SINT_TO_FP_INREG";
1673+ case PPCISD::UINT_TO_FP_INREG:
1674+ return "PPCISD::UINT_TO_FP_INREG";
1675+ case PPCISD::FP_TO_I64_INREG:
1676+ return "PPCISD::FP_TO_I64_INREG";
1677+ case PPCISD::FP_TO_I32_INREG:
1678+ return "PPCISD::FP_TO_I32_INREG";
1679+ case PPCISD::FP_TO_U64_INREG:
1680+ return "PPCISD::FP_TO_U64_INREG";
1681+ case PPCISD::FP_TO_U32_INREG:
1682+ return "PPCISD::FP_TO_U32_INREG";
16791683 case PPCISD::FRE: return "PPCISD::FRE";
16801684 case PPCISD::FRSQRTE: return "PPCISD::FRSQRTE";
16811685 case PPCISD::FTSQRT:
@@ -1810,22 +1814,18 @@ const char *PPCTargetLowering::getTargetNodeName(unsigned Opcode) const {
18101814 case PPCISD::FNMSUB: return "PPCISD::FNMSUB";
18111815 case PPCISD::STRICT_FADDRTZ:
18121816 return "PPCISD::STRICT_FADDRTZ";
1813- case PPCISD::STRICT_FCTIDZ:
1814- return "PPCISD::STRICT_FCTIDZ";
1815- case PPCISD::STRICT_FCTIWZ:
1816- return "PPCISD::STRICT_FCTIWZ";
1817- case PPCISD::STRICT_FCTIDUZ:
1818- return "PPCISD::STRICT_FCTIDUZ";
1819- case PPCISD::STRICT_FCTIWUZ:
1820- return "PPCISD::STRICT_FCTIWUZ";
1821- case PPCISD::STRICT_FCFID:
1822- return "PPCISD::STRICT_FCFID";
1823- case PPCISD::STRICT_FCFIDU:
1824- return "PPCISD::STRICT_FCFIDU";
1825- case PPCISD::STRICT_FCFIDS:
1826- return "PPCISD::STRICT_FCFIDS";
1827- case PPCISD::STRICT_FCFIDUS:
1828- return "PPCISD::STRICT_FCFIDUS";
1817+ case PPCISD::STRICT_FP_TO_I64_INREG:
1818+ return "PPCISD::STRICT_FP_TO_I64_INREG";
1819+ case PPCISD::STRICT_FP_TO_I32_INREG:
1820+ return "PPCISD::STRICT_FP_TO_I32_INREG";
1821+ case PPCISD::STRICT_FP_TO_U64_INREG:
1822+ return "PPCISD::STRICT_FP_TO_U64_INREG";
1823+ case PPCISD::STRICT_FP_TO_U32_INREG:
1824+ return "PPCISD::STRICT_FP_TO_U32_INREG";
1825+ case PPCISD::STRICT_SINT_TO_FP_INREG:
1826+ return "PPCISD::STRICT_SINT_TO_FP_INREG";
1827+ case PPCISD::STRICT_UINT_TO_FP_INREG:
1828+ return "PPCISD::STRICT_UINT_TO_FP_INREG";
18291829 case PPCISD::LXVRZX: return "PPCISD::LXVRZX";
18301830 case PPCISD::STORE_COND:
18311831 return "PPCISD::STORE_COND";
@@ -8168,22 +8168,18 @@ static unsigned getPPCStrictOpcode(unsigned Opc) {
81688168 switch (Opc) {
81698169 default:
81708170 llvm_unreachable("No strict version of this opcode!");
8171- case PPCISD::FCTIDZ:
8172- return PPCISD::STRICT_FCTIDZ;
8173- case PPCISD::FCTIWZ:
8174- return PPCISD::STRICT_FCTIWZ;
8175- case PPCISD::FCTIDUZ:
8176- return PPCISD::STRICT_FCTIDUZ;
8177- case PPCISD::FCTIWUZ:
8178- return PPCISD::STRICT_FCTIWUZ;
8179- case PPCISD::FCFID:
8180- return PPCISD::STRICT_FCFID;
8181- case PPCISD::FCFIDU:
8182- return PPCISD::STRICT_FCFIDU;
8183- case PPCISD::FCFIDS:
8184- return PPCISD::STRICT_FCFIDS;
8185- case PPCISD::FCFIDUS:
8186- return PPCISD::STRICT_FCFIDUS;
8171+ case PPCISD::FP_TO_I64_INREG:
8172+ return PPCISD::STRICT_FP_TO_I64_INREG;
8173+ case PPCISD::FP_TO_I32_INREG:
8174+ return PPCISD::STRICT_FP_TO_I32_INREG;
8175+ case PPCISD::FP_TO_U64_INREG:
8176+ return PPCISD::STRICT_FP_TO_U64_INREG;
8177+ case PPCISD::FP_TO_U32_INREG:
8178+ return PPCISD::STRICT_FP_TO_U32_INREG;
8179+ case PPCISD::SINT_TO_FP_INREG:
8180+ return PPCISD::STRICT_SINT_TO_FP_INREG;
8181+ case PPCISD::UINT_TO_FP_INREG:
8182+ return PPCISD::STRICT_UINT_TO_FP_INREG;
81878183 }
81888184}
81898185
@@ -8221,13 +8217,14 @@ static SDValue convertFPToInt(SDValue Op, SelectionDAG &DAG,
82218217 switch (DestTy.SimpleTy) {
82228218 default: llvm_unreachable("Unhandled FP_TO_INT type in custom expander!");
82238219 case MVT::i32:
8224- Opc = IsSigned ? PPCISD::FCTIWZ
8225- : (Subtarget.hasFPCVT() ? PPCISD::FCTIWUZ : PPCISD::FCTIDZ);
8220+ Opc = IsSigned ? PPCISD::FP_TO_I32_INREG
8221+ : (Subtarget.hasFPCVT() ? PPCISD::FP_TO_U32_INREG
8222+ : PPCISD::FP_TO_I64_INREG);
82268223 break;
82278224 case MVT::i64:
82288225 assert((IsSigned || Subtarget.hasFPCVT()) &&
82298226 "i64 FP_TO_UINT is supported only with FPCVT");
8230- Opc = IsSigned ? PPCISD::FCTIDZ : PPCISD::FCTIDUZ ;
8227+ Opc = IsSigned ? PPCISD::FP_TO_I64_INREG : PPCISD::FP_TO_U64_INREG ;
82318228 }
82328229 EVT ConvTy = Src.getValueType() == MVT::f128 ? MVT::f128 : MVT::f64;
82338230 SDValue Conv;
@@ -8528,8 +8525,8 @@ static SDValue convertIntToFP(SDValue Op, SDValue Src, SelectionDAG &DAG,
85288525 // If we have FCFIDS, then use it when converting to single-precision.
85298526 // Otherwise, convert to double-precision and then round.
85308527 bool IsSingle = Op.getValueType() == MVT::f32 && Subtarget.hasFPCVT();
8531- unsigned ConvOpc = IsSingle ? (IsSigned ? PPCISD::FCFIDS : PPCISD::FCFIDUS)
8532- : ( IsSigned ? PPCISD::FCFID : PPCISD::FCFIDU) ;
8528+ unsigned ConvOpc =
8529+ IsSigned ? PPCISD::SINT_TO_FP_INREG : PPCISD::UINT_TO_FP_INREG ;
85338530 EVT ConvTy = IsSingle ? MVT::f32 : MVT::f64;
85348531 if (Op->isStrictFPOpcode()) {
85358532 if (!Chain)
@@ -14469,13 +14466,13 @@ combineElementTruncationToVectorTruncation(SDNode *N,
1446914466 // This combine happens after legalization so the fp_to_[su]i nodes are
1447014467 // already converted to PPCSISD nodes.
1447114468 unsigned FirstConversion = FirstInput.getOperand(0).getOpcode();
14472- if (FirstConversion == PPCISD::FCTIDZ ||
14473- FirstConversion == PPCISD::FCTIDUZ ||
14474- FirstConversion == PPCISD::FCTIWZ ||
14475- FirstConversion == PPCISD::FCTIWUZ ) {
14469+ if (FirstConversion == PPCISD::FP_TO_I64_INREG ||
14470+ FirstConversion == PPCISD::FP_TO_U64_INREG ||
14471+ FirstConversion == PPCISD::FP_TO_I32_INREG ||
14472+ FirstConversion == PPCISD::FP_TO_U32_INREG ) {
1447614473 bool IsSplat = true;
14477- bool Is32Bit = FirstConversion == PPCISD::FCTIWZ ||
14478- FirstConversion == PPCISD::FCTIWUZ ;
14474+ bool Is32Bit = FirstConversion == PPCISD::FP_TO_I32_INREG ||
14475+ FirstConversion == PPCISD::FP_TO_U32_INREG ;
1447914476 EVT SrcVT = FirstInput.getOperand(0).getValueType();
1448014477 SmallVector<SDValue, 4> Ops;
1448114478 EVT TargetVT = N->getValueType(0);
@@ -14521,8 +14518,8 @@ combineElementTruncationToVectorTruncation(SDNode *N,
1452114518 }
1452214519
1452314520 unsigned Opcode;
14524- if (FirstConversion == PPCISD::FCTIDZ ||
14525- FirstConversion == PPCISD::FCTIWZ )
14521+ if (FirstConversion == PPCISD::FP_TO_I64_INREG ||
14522+ FirstConversion == PPCISD::FP_TO_I32_INREG )
1452614523 Opcode = ISD::FP_TO_SINT;
1452714524 else
1452814525 Opcode = ISD::FP_TO_UINT;
@@ -14932,9 +14929,8 @@ SDValue PPCTargetLowering::combineFPToIntToFP(SDNode *N,
1493214929 if (Subtarget.hasP9Vector() && Subtarget.hasP9Altivec() && SubWordLoad) {
1493314930 bool Signed = N->getOpcode() == ISD::SINT_TO_FP;
1493414931 bool DstDouble = Op.getValueType() == MVT::f64;
14935- unsigned ConvOp = Signed ?
14936- (DstDouble ? PPCISD::FCFID : PPCISD::FCFIDS) :
14937- (DstDouble ? PPCISD::FCFIDU : PPCISD::FCFIDUS);
14932+ unsigned ConvOp =
14933+ Signed ? PPCISD::SINT_TO_FP_INREG : PPCISD::UINT_TO_FP_INREG;
1493814934 SDValue WidthConst =
1493914935 DAG.getIntPtrConstant(FirstOperand.getValueType() == MVT::i8 ? 1 : 2,
1494014936 dl, false);
@@ -14966,11 +14962,8 @@ SDValue PPCTargetLowering::combineFPToIntToFP(SDNode *N,
1496614962
1496714963 // If we have FCFIDS, then use it when converting to single-precision.
1496814964 // Otherwise, convert to double-precision and then round.
14969- unsigned FCFOp = (Subtarget.hasFPCVT() && Op.getValueType() == MVT::f32)
14970- ? (Op.getOpcode() == ISD::UINT_TO_FP ? PPCISD::FCFIDUS
14971- : PPCISD::FCFIDS)
14972- : (Op.getOpcode() == ISD::UINT_TO_FP ? PPCISD::FCFIDU
14973- : PPCISD::FCFID);
14965+ unsigned FCFOp = Op.getOpcode() == ISD::UINT_TO_FP ? PPCISD::UINT_TO_FP_INREG
14966+ : PPCISD::SINT_TO_FP_INREG;
1497414967 MVT FCFTy = (Subtarget.hasFPCVT() && Op.getValueType() == MVT::f32)
1497514968 ? MVT::f32
1497614969 : MVT::f64;
@@ -14989,9 +14982,9 @@ SDValue PPCTargetLowering::combineFPToIntToFP(SDNode *N,
1498914982 return SDValue();
1499014983 }
1499114984
14992- unsigned FCTOp =
14993- Op.getOperand(0).getOpcode() == ISD::FP_TO_SINT ? PPCISD::FCTIDZ :
14994- PPCISD::FCTIDUZ ;
14985+ unsigned FCTOp = Op.getOperand(0).getOpcode() == ISD::FP_TO_SINT
14986+ ? PPCISD::FP_TO_I64_INREG
14987+ : PPCISD::FP_TO_U64_INREG ;
1499514988
1499614989 SDValue Tmp = DAG.getNode(FCTOp, dl, MVT::f64, Src);
1499714990 SDValue FP = DAG.getNode(FCFOp, dl, FCFTy, Tmp);
0 commit comments