[llvm-commits] [llvm] r118164 - /llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Eric Christopher echristo at apple.com
Wed Nov 3 02:36:40 PDT 2010


Author: echristo
Date: Wed Nov  3 04:36:40 2010
New Revision: 118164

URL: http://llvm.org/viewvc/llvm-project?rev=118164&view=rev
Log:
If we have an undef mask our Elt will be -1 for our access, handle
this by using an undef as a pointer.

Fixes rdar://8625016

Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=118164&r1=118163&r2=118164&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Wed Nov  3 04:36:40 2010
@@ -6190,7 +6190,7 @@
   SDValue EltNo = N->getOperand(1);
 
   if (isa<ConstantSDNode>(EltNo)) {
-    unsigned Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
+    int Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
     bool NewLoad = false;
     bool BCNumEltsChanged = false;
     EVT VT = InVec.getValueType();
@@ -6228,7 +6228,7 @@
 
       // Select the input vector, guarding against out of range extract vector.
       unsigned NumElems = VT.getVectorNumElements();
-      int Idx = (Elt > NumElems) ? -1 : SVN->getMaskElt(Elt);
+      int Idx = (Elt > (int)NumElems) ? -1 : SVN->getMaskElt(Elt);
       InVec = (Idx < (int)NumElems) ? InVec.getOperand(0) : InVec.getOperand(1);
 
       if (InVec.getOpcode() == ISD::BIT_CONVERT)
@@ -6257,7 +6257,11 @@
 
     SDValue NewPtr = LN0->getBasePtr();
     unsigned PtrOff = 0;
-    if (Elt) {
+    // If Idx was -1 above, Elt is going to be -1, so just use undef as our
+    // new pointer.
+    if (Elt == -1) {
+      NewPtr = DAG.getUNDEF(NewPtr.getValueType());
+    } else if (Elt) {
       PtrOff = LVT.getSizeInBits() * Elt / 8;
       EVT PtrType = NewPtr.getValueType();
       if (TLI.isBigEndian())





More information about the llvm-commits mailing list