Fix a crash on release builds if gather intrinsics are passed a non-constant value...
authorCraig Topper <craig.topper@gmail.com>
Sun, 1 Jul 2012 02:17:08 +0000 (02:17 +0000)
committerCraig Topper <craig.topper@gmail.com>
Sun, 1 Jul 2012 02:17:08 +0000 (02:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159501 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelDAGToDAG.cpp

index b34f15c34be766d80ad385a0bdb034f4381b1e87..4a0271fd86b0236d6cd0f6da43a2e3813ac26655 100644 (file)
@@ -1963,7 +1963,8 @@ SDNode *X86DAGToDAGISel::SelectGather(SDNode *Node, unsigned Opc) {
   SDValue VIdx = Node->getOperand(4);
   SDValue VMask = Node->getOperand(5);
   ConstantSDNode *Scale = dyn_cast<ConstantSDNode>(Node->getOperand(6));
-  assert(Scale && "Scale should be a constant for GATHER operations");
+  if (!Scale)
+    return 0;
 
   // Memory Operands: Base, Scale, Index, Disp, Segment
   SDValue Disp = CurDAG->getTargetConstant(0, MVT::i32);
@@ -2031,7 +2032,9 @@ SDNode *X86DAGToDAGISel::Select(SDNode *Node) {
       case Intrinsic::x86_avx2_gather_q_d:      Opc = X86::VPGATHERQDrm;  break;
       case Intrinsic::x86_avx2_gather_q_d_256:  Opc = X86::VPGATHERQDYrm; break;
       }
-      return SelectGather(Node, Opc);
+      SDNode *RetVal = SelectGather(Node, Opc);
+      if (RetVal)
+        return RetVal;
     }
     }
     break;