From 70fb1aefd58eb78404a2bc86b6960b7b64574082 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 10 Jul 2007 15:19:29 +0000 Subject: [PATCH] Fix a bug in the folding of binary operators to undef. 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 | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 861e5056bb4..e0f0ece9cd5 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -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) -- 2.34.1