Just return undef for invalid masks or elts, and since we're doing that,
authorEric Christopher <echristo@apple.com>
Wed, 3 Nov 2010 20:44:42 +0000 (20:44 +0000)
committerEric Christopher <echristo@apple.com>
Wed, 3 Nov 2010 20:44:42 +0000 (20:44 +0000)
just do it earlier too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118195 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index c31598e6a7adc976358b7de6328da88d0ecb9e64..7154d9d691c3a848f03b5f0ad9d42e2aa0998e0b 100644 (file)
@@ -6242,6 +6242,10 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
     if (!LN0 || !LN0->hasOneUse() || LN0->isVolatile())
       return SDValue();
 
+    // If Idx was -1 above, Elt is going to be -1, so just return undef.
+    if (Elt == -1)
+      return DAG.getUNDEF(LN0->getBasePtr().getValueType());
+
     unsigned Align = LN0->getAlignment();
     if (NewLoad) {
       // Check the resultant load doesn't need a higher alignment than the
@@ -6257,11 +6261,8 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
 
     SDValue NewPtr = LN0->getBasePtr();
     unsigned PtrOff = 0;
-    // 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) {
+    
+    if (Elt) {
       PtrOff = LVT.getSizeInBits() * Elt / 8;
       EVT PtrType = NewPtr.getValueType();
       if (TLI.isBigEndian())