visitVBinOp: Can't fold divide by zero!
authorEvan Cheng <evan.cheng@apple.com>
Wed, 31 May 2006 06:08:35 +0000 (06:08 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 31 May 2006 06:08:35 +0000 (06:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28584 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index c05c976f39030e0acf6072798841f735c6e25fbd..938e17a084f6222da9021249a51a51c6c906f0a4 100644 (file)
@@ -2778,6 +2778,14 @@ SDOperand DAGCombiner::visitVBinOp(SDNode *N, ISD::NodeType IntOp,
            RHSOp.getOpcode() != ISD::Constant &&
            RHSOp.getOpcode() != ISD::ConstantFP))
         break;
+      // Can't fold divide by zero.
+      if (N->getOpcode() == ISD::VSDIV || N->getOpcode() == ISD::VUDIV) {
+        if ((RHSOp.getOpcode() == ISD::Constant &&
+             cast<ConstantSDNode>(RHSOp.Val)->isNullValue()) ||
+            (RHSOp.getOpcode() == ISD::ConstantFP &&
+             !cast<ConstantFPSDNode>(RHSOp.Val)->getValue()))
+          break;
+      }
       Ops.push_back(DAG.getNode(ScalarOp, EltType, LHSOp, RHSOp));
       AddToWorkList(Ops.back().Val);
       assert((Ops.back().getOpcode() == ISD::UNDEF ||