[llvm-branch-commits] [llvm-branch] r214413 - Merging r213798:

Bill Wendling isanbard at gmail.com
Thu Jul 31 11:17:04 PDT 2014


Author: void
Date: Thu Jul 31 13:17:04 2014
New Revision: 214413

URL: http://llvm.org/viewvc/llvm-project?rev=214413&view=rev
Log:
Merging r213798:
------------------------------------------------------------------------
r213798 | grosbach | 2014-07-23 13:41:31 -0700 (Wed, 23 Jul 2014) | 7 lines

DAG: fp->int conversion for non-splat constants.

Constant fold the lanes of the input constant build_vector individually
so we correctly handle when the vector elements are not all the same
constant value.

PR20394
------------------------------------------------------------------------

Modified:
    llvm/branches/release_35/   (props changed)
    llvm/branches/release_35/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
    llvm/branches/release_35/test/CodeGen/X86/x86-setcc-int-to-fp-combine.ll

Propchange: llvm/branches/release_35/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 31 13:17:04 2014
@@ -1,3 +1,3 @@
 /llvm/branches/Apple/Pertwee:110850,110961
 /llvm/branches/type-system-rewrite:133420-134817
-/llvm/trunk:155241,213653,213749,213773,213793,213815,213847,213880,213884,213894-213895,213915,214129,214180,214287,214331
+/llvm/trunk:155241,213653,213749,213773,213793,213798,213815,213847,213880,213884,213894-213895,213915,214129,214180,214287,214331

Modified: llvm/branches/release_35/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_35/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=214413&r1=214412&r2=214413&view=diff
==============================================================================
--- llvm/branches/release_35/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
+++ llvm/branches/release_35/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Thu Jul 31 13:17:04 2014
@@ -2795,11 +2795,7 @@ SDValue SelectionDAG::getNode(unsigned O
 
   // Constant fold unary operations with a vector integer operand.
   if (BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(Operand.getNode())) {
-    APInt Val;
-    APInt DummyUndefs;
-    unsigned SplatBitSize;
-    bool DummyHasUndefs;
-    if (BV->isConstantSplat(Val, DummyUndefs, SplatBitSize, DummyHasUndefs)) {
+    if (BV->isConstant()) {
       switch (Opcode) {
       default:
         // FIXME: Entirely reasonable to perform folding of other unary
@@ -2807,13 +2803,16 @@ SDValue SelectionDAG::getNode(unsigned O
         break;
       case ISD::UINT_TO_FP:
       case ISD::SINT_TO_FP: {
-        APFloat APF(
-            EVTToAPFloatSemantics(VT.getVectorElementType()),
-            APInt::getNullValue(VT.getVectorElementType().getSizeInBits()));
-        (void)APF.convertFromAPInt(Val, Opcode == ISD::SINT_TO_FP,
-                                   APFloat::rmNearestTiesToEven);
-
-        return getConstantFP(APF, VT);
+        SmallVector<SDValue, 8> Ops;
+        for (int i = 0, e = VT.getVectorNumElements(); i != e; ++i) {
+          SDValue OpN = BV->getOperand(i);
+          // Let the above scalar folding handle the conversion of each
+          // element.
+          OpN = getNode(ISD::SINT_TO_FP, DL, VT.getVectorElementType(),
+                        OpN);
+          Ops.push_back(OpN);
+        }
+        return getNode(ISD::BUILD_VECTOR, DL, VT, Ops);
       }
       }
     }

Modified: llvm/branches/release_35/test/CodeGen/X86/x86-setcc-int-to-fp-combine.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_35/test/CodeGen/X86/x86-setcc-int-to-fp-combine.ll?rev=214413&r1=214412&r2=214413&view=diff
==============================================================================
--- llvm/branches/release_35/test/CodeGen/X86/x86-setcc-int-to-fp-combine.ll (original)
+++ llvm/branches/release_35/test/CodeGen/X86/x86-setcc-int-to-fp-combine.ll Thu Jul 31 13:17:04 2014
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
 
 define <4 x float> @foo(<4 x float> %val, <4 x float> %test) nounwind {
-; CHECK-LABEL: LCPI0_0
+; CHECK-LABEL: LCPI0_0:
 ; CHECK-NEXT: .long 1065353216              ## float 1.000000e+00
 ; CHECK-NEXT: .long 1065353216              ## float 1.000000e+00
 ; CHECK-NEXT: .long 1065353216              ## float 1.000000e+00
@@ -16,3 +16,17 @@ define <4 x float> @foo(<4 x float> %val
   %result = sitofp <4 x i32> %ext to <4 x float>
   ret <4 x float> %result
 }
+
+define void @bar(<4 x float>* noalias %result) nounwind {
+; CHECK-LABEL: LCPI1_0:
+; CHECK-NEXT: .long 1082130432              ## float 4.000000e+00
+; CHECK-NEXT: .long 1084227584              ## float 5.000000e+00
+; CHECK-NEXT: .long 1086324736              ## float 6.000000e+00
+; CHECK-NEXT: .long 1088421888              ## float 7.000000e+00
+; CHECK-LABEL: bar:
+; CHECK:  movaps LCPI1_0(%rip), %xmm0
+
+  %val = uitofp <4 x i32> <i32 4, i32 5, i32 6, i32 7> to <4 x float>
+  store <4 x float> %val, <4 x float>* %result
+  ret void
+}





More information about the llvm-branch-commits mailing list