diff options
| author | Dan Gohman <gohman@apple.com> | 2007-07-10 14:20:37 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2007-07-10 14:20:37 +0000 |
| commit | fa91282dbf3a9c3bf6d19c3e774434e20d1cdddc (patch) | |
| tree | a73044abea0f7b0d47df7aa5171f52513c0a1184 /llvm/lib | |
| parent | 0818f7dbf91ee459d20c3a86880dc5cb91af4e09 (diff) | |
| download | bcm5719-llvm-fa91282dbf3a9c3bf6d19c3e774434e20d1cdddc.tar.gz bcm5719-llvm-fa91282dbf3a9c3bf6d19c3e774434e20d1cdddc.zip | |
Fix the folding of undef in several binary operators to recognize
undef in either the left or right operand.
llvm-svn: 38489
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 81d5757d9d0..861e5056bb4 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -855,7 +855,7 @@ SDOperand DAGCombiner::visitADD(SDNode *N) { if (FoldedVOp.Val) return FoldedVOp; // fold (add x, undef) -> undef - if (N1.getOpcode() == ISD::UNDEF) + if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return N1; // fold (add c1, c2) -> c1+c2 if (N0C && N1C) @@ -1047,7 +1047,7 @@ SDOperand DAGCombiner::visitMUL(SDNode *N) { if (FoldedVOp.Val) return FoldedVOp; // fold (mul x, undef) -> 0 - if (N1.getOpcode() == ISD::UNDEF) + if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return DAG.getConstant(0, VT); // fold (mul c1, c2) -> c1*c2 if (N0C && N1C) @@ -1339,7 +1339,7 @@ SDOperand DAGCombiner::visitMULHS(SDNode *N) { DAG.getConstant(MVT::getSizeInBits(N0.getValueType())-1, TLI.getShiftAmountTy())); // fold (mulhs x, undef) -> 0 - if (N1.getOpcode() == ISD::UNDEF) + if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return DAG.getConstant(0, VT); return SDOperand(); @@ -1358,7 +1358,7 @@ SDOperand DAGCombiner::visitMULHU(SDNode *N) { if (N1C && N1C->getValue() == 1) return DAG.getConstant(0, N0.getValueType()); // fold (mulhu x, undef) -> 0 - if (N1.getOpcode() == ISD::UNDEF) + if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return DAG.getConstant(0, VT); return SDOperand(); @@ -1416,7 +1416,7 @@ SDOperand DAGCombiner::visitAND(SDNode *N) { if (FoldedVOp.Val) return FoldedVOp; // fold (and x, undef) -> 0 - if (N1.getOpcode() == ISD::UNDEF) + if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return DAG.getConstant(0, VT); // fold (and c1, c2) -> c1&c2 if (N0C && N1C) @@ -1604,7 +1604,7 @@ SDOperand DAGCombiner::visitOR(SDNode *N) { if (FoldedVOp.Val) return FoldedVOp; // fold (or x, undef) -> -1 - if (N1.getOpcode() == ISD::UNDEF) + if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return DAG.getConstant(~0ULL, VT); // fold (or c1, c2) -> c1|c2 if (N0C && N1C) @@ -1890,7 +1890,7 @@ SDOperand DAGCombiner::visitXOR(SDNode *N) { if (FoldedVOp.Val) return FoldedVOp; // fold (xor x, undef) -> undef - if (N1.getOpcode() == ISD::UNDEF) + if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return N1; // fold (xor c1, c2) -> c1^c2 if (N0C && N1C) |

