[llvm-branch-commits] [llvm-branch] r87061 - in /llvm/branches/Apple/Leela: include/llvm/CodeGen/SelectionDAGNodes.h lib/CodeGen/SelectionDAG/SelectionDAG.cpp lib/Target/PowerPC/PPCISelLowering.cpp test/CodeGen/PowerPC/vec_splat_constant.ll

Dale Johannesen dalej at apple.com
Thu Nov 12 17:49:05 PST 2009


Author: johannes
Date: Thu Nov 12 19:49:05 2009
New Revision: 87061

URL: http://llvm.org/viewvc/llvm-project?rev=87061&view=rev
Log:
--- Merging r87060 into '.':
A    test/CodeGen/PowerPC/vec_splat_constant.ll
U    include/llvm/CodeGen/SelectionDAGNodes.h
U    lib/CodeGen/SelectionDAG/SelectionDAG.cpp
U    lib/Target/PowerPC/PPCISelLowering.cpp


Added:
    llvm/branches/Apple/Leela/test/CodeGen/PowerPC/vec_splat_constant.ll
      - copied unchanged from r87060, llvm/trunk/test/CodeGen/PowerPC/vec_splat_constant.ll
Modified:
    llvm/branches/Apple/Leela/include/llvm/CodeGen/SelectionDAGNodes.h
    llvm/branches/Apple/Leela/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
    llvm/branches/Apple/Leela/lib/Target/PowerPC/PPCISelLowering.cpp

Modified: llvm/branches/Apple/Leela/include/llvm/CodeGen/SelectionDAGNodes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Leela/include/llvm/CodeGen/SelectionDAGNodes.h?rev=87061&r1=87060&r2=87061&view=diff

==============================================================================
--- llvm/branches/Apple/Leela/include/llvm/CodeGen/SelectionDAGNodes.h (original)
+++ llvm/branches/Apple/Leela/include/llvm/CodeGen/SelectionDAGNodes.h Thu Nov 12 19:49:05 2009
@@ -1953,10 +1953,10 @@
   /// that value are zero, and the corresponding bits in the SplatUndef mask
   /// are set.  The SplatBitSize value is set to the splat element size in
   /// bits.  HasAnyUndefs is set to true if any bits in the vector are
-  /// undefined.
+  /// undefined.  isBigEndian describes the endianness of the target.
   bool isConstantSplat(APInt &SplatValue, APInt &SplatUndef,
                        unsigned &SplatBitSize, bool &HasAnyUndefs,
-                       unsigned MinSplatBits = 0);
+                       unsigned MinSplatBits = 0, bool isBigEndian = false);
 
   static inline bool classof(const BuildVectorSDNode *) { return true; }
   static inline bool classof(const SDNode *N) {

Modified: llvm/branches/Apple/Leela/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Leela/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=87061&r1=87060&r2=87061&view=diff

==============================================================================
--- llvm/branches/Apple/Leela/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
+++ llvm/branches/Apple/Leela/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Thu Nov 12 19:49:05 2009
@@ -5917,7 +5917,8 @@
                                         APInt &SplatUndef,
                                         unsigned &SplatBitSize,
                                         bool &HasAnyUndefs,
-                                        unsigned MinSplatBits) {
+                                        unsigned MinSplatBits,
+                                        bool isBigEndian) {
   EVT VT = getValueType(0);
   assert(VT.isVector() && "Expected a vector type");
   unsigned sz = VT.getSizeInBits();
@@ -5934,12 +5935,14 @@
   unsigned int nOps = getNumOperands();
   assert(nOps > 0 && "isConstantSplat has 0-size build vector");
   unsigned EltBitSize = VT.getVectorElementType().getSizeInBits();
-  for (unsigned i = 0; i < nOps; ++i) {
+
+  for (unsigned j = 0; j < nOps; ++j) {
+    unsigned i = isBigEndian ? nOps-1-j : j;
     SDValue OpVal = getOperand(i);
-    unsigned BitPos = i * EltBitSize;
+    unsigned BitPos = j * EltBitSize;
 
     if (OpVal.getOpcode() == ISD::UNDEF)
-      SplatUndef |= APInt::getBitsSet(sz, BitPos, BitPos +EltBitSize);
+      SplatUndef |= APInt::getBitsSet(sz, BitPos, BitPos + EltBitSize);
     else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal))
       SplatValue |= (APInt(CN->getAPIntValue()).zextOrTrunc(EltBitSize).
                      zextOrTrunc(sz) << BitPos);

Modified: llvm/branches/Apple/Leela/lib/Target/PowerPC/PPCISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Leela/lib/Target/PowerPC/PPCISelLowering.cpp?rev=87061&r1=87060&r2=87061&view=diff

==============================================================================
--- llvm/branches/Apple/Leela/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/branches/Apple/Leela/lib/Target/PowerPC/PPCISelLowering.cpp Thu Nov 12 19:49:05 2009
@@ -637,7 +637,7 @@
   unsigned BitSize;
   bool HasAnyUndefs;
   
-  if (BV->isConstantSplat(APVal, APUndef, BitSize, HasAnyUndefs, 32))
+  if (BV->isConstantSplat(APVal, APUndef, BitSize, HasAnyUndefs, 32, true))
     if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N->getOperand(0)))
       return CFP->getValueAPF().isNegZero();
 
@@ -3667,7 +3667,7 @@
   unsigned SplatBitSize;
   bool HasAnyUndefs;
   if (! BVN->isConstantSplat(APSplatBits, APSplatUndef, SplatBitSize,
-                             HasAnyUndefs) || SplatBitSize > 32)
+                             HasAnyUndefs, 0, true) || SplatBitSize > 32)
     return SDValue();
 
   unsigned SplatBits = APSplatBits.getZExtValue();





More information about the llvm-branch-commits mailing list