Fix a bug in the folding of binary operators to undef.
authorDan Gohman <gohman@apple.com>
Tue, 10 Jul 2007 15:19:29 +0000 (15:19 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 10 Jul 2007 15:19:29 +0000 (15:19 +0000)
Thanks to Lauro for spotting this!

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

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index 861e5056bb486f0ec195cb49a28658feb79ef931..e0f0ece9cd554508d96e8ff377d61e55d9fdbef4 100644 (file)
@@ -855,7 +855,9 @@ SDOperand DAGCombiner::visitADD(SDNode *N) {
   if (FoldedVOp.Val) return FoldedVOp;
   
   // fold (add x, undef) -> undef
-  if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
+  if (N0.getOpcode() == ISD::UNDEF)
+    return N0;
+  if (N1.getOpcode() == ISD::UNDEF)
     return N1;
   // fold (add c1, c2) -> c1+c2
   if (N0C && N1C)
@@ -1029,8 +1031,10 @@ SDOperand DAGCombiner::visitSUB(SDNode *N) {
     if (Result.Val) return Result;
   }
   // If either operand of a sub is undef, the result is undef
-  if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
-    return DAG.getNode(ISD::UNDEF, VT);
+  if (N0.getOpcode() == ISD::UNDEF)
+    return N0;
+  if (N1.getOpcode() == ISD::UNDEF)
+    return N1;
 
   return SDOperand();
 }
@@ -1890,7 +1894,9 @@ SDOperand DAGCombiner::visitXOR(SDNode *N) {
   if (FoldedVOp.Val) return FoldedVOp;
   
   // fold (xor x, undef) -> undef
-  if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
+  if (N0.getOpcode() == ISD::UNDEF)
+    return N0;
+  if (N1.getOpcode() == ISD::UNDEF)
     return N1;
   // fold (xor c1, c2) -> c1^c2
   if (N0C && N1C)