[llvm-branch-commits] [llvm-branch] r331727 - Cherry-pick @=r330947 to google/stable for 2018-04-24
David L. Jones via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon May 7 21:11:31 PDT 2018
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();
}
More information about the llvm-branch-commits
mailing list