[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