Author: dlj Date: Mon May 7 21:11:31 2018 New Revision: 331727 URL: http://llvm.org/viewvc/llvm-project?rev=331727&view=rev Log: Cherry-pick @=r330947 to google/stable for 2018-04-24
Modified: llvm/branches/google/stable/ (props changed) llvm/branches/google/stable/BRANCH_HISTORY llvm/branches/google/stable/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Propchange: llvm/branches/google/stable/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon May 7 21:11:31 2018 @@ -1,3 +1,3 @@ /llvm/branches/Apple/Pertwee:110850,110961 /llvm/branches/type-system-rewrite:133420-134817 -/llvm/trunk:155241,330893 +/llvm/trunk:155241,330893,330947 Modified: llvm/branches/google/stable/BRANCH_HISTORY URL: http://llvm.org/viewvc/llvm-project/llvm/branches/google/stable/BRANCH_HISTORY?rev=331727&r1=331726&r2=331727&view=diff ============================================================================== --- llvm/branches/google/stable/BRANCH_HISTORY (original) +++ llvm/branches/google/stable/BRANCH_HISTORY Mon May 7 21:11:31 2018 @@ -1,2 +1,3 @@ @r330764 @=r330893 +@=r330947 Modified: llvm/branches/google/stable/lib/CodeGen/SelectionDAG/DAGCombiner.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/google/stable/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=331727&r1=331726&r2=331727&view=diff ============================================================================== --- llvm/branches/google/stable/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original) +++ llvm/branches/google/stable/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Mon May 7 21:11:31 2018 @@ -10906,6 +10906,28 @@ SDValue DAGCombiner::visitFCOPYSIGN(SDNo return SDValue(); } +static SDValue foldFPToIntToFP(SDNode *N, SelectionDAG &DAG, + const TargetLowering &TLI) { + // We only do this if the target has legal ftrunc. Otherwise, we'd likely be + // replacing casts with a libcall. + EVT VT = N->getValueType(0); + if (!TLI.isOperationLegal(ISD::FTRUNC, VT)) + return SDValue(); + + // fptosi/fptoui round towards zero, so converting from FP to integer and + // back is the same as an 'ftrunc': [us]itofp (fpto[us]i X) --> ftrunc X + SDValue N0 = N->getOperand(0); + if (N->getOpcode() == ISD::SINT_TO_FP && N0.getOpcode() == ISD::FP_TO_SINT && + N0.getOperand(0).getValueType() == VT) + return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0.getOperand(0)); + + if (N->getOpcode() == ISD::UINT_TO_FP && N0.getOpcode() == ISD::FP_TO_UINT && + N0.getOperand(0).getValueType() == VT) + return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0.getOperand(0)); + + return SDValue(); +} + SDValue DAGCombiner::visitSINT_TO_FP(SDNode *N) { SDValue N0 = N->getOperand(0); EVT VT = N->getValueType(0); @@ -10957,14 +10979,8 @@ SDValue DAGCombiner::visitSINT_TO_FP(SDN } } - // fptosi rounds towards zero, so converting from FP to integer and back is - // the same as an 'ftrunc': sitofp (fptosi X) --> ftrunc X - // We only do this if the target has legal ftrunc, otherwise we'd likely be - // replacing casts with a libcall. - if (N0.getOpcode() == ISD::FP_TO_SINT && - N0.getOperand(0).getValueType() == VT && - TLI.isOperationLegal(ISD::FTRUNC, VT)) - return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0.getOperand(0)); + if (SDValue FTrunc = foldFPToIntToFP(N, DAG, TLI)) + return FTrunc; return SDValue(); } @@ -11005,14 +11021,8 @@ SDValue DAGCombiner::visitUINT_TO_FP(SDN } } - // fptoui rounds towards zero, so converting from FP to integer and back is - // the same as an 'ftrunc': uitofp (fptoui X) --> ftrunc X - // We only do this if the target has legal ftrunc, otherwise we'd likely be - // replacing casts with a libcall. - if (N0.getOpcode() == ISD::FP_TO_UINT && - N0.getOperand(0).getValueType() == VT && - TLI.isOperationLegal(ISD::FTRUNC, VT)) - return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0.getOperand(0)); + if (SDValue FTrunc = foldFPToIntToFP(N, DAG, TLI)) + return FTrunc; return SDValue(); } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits