diff options
author | Chris Lattner <sabre@nondot.org> | 2006-05-05 06:31:05 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-05-05 06:31:05 +0000 |
commit | 002ee91457c2603856c185b0c7a1f2b674e0e492 (patch) | |
tree | 2e39d9449aa87ba6b05fd59c864d736a35a6325e /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | 5ac42936069a88395aa7087caec6fabd5d57e63f (diff) | |
download | bcm5719-llvm-002ee91457c2603856c185b0c7a1f2b674e0e492.tar.gz bcm5719-llvm-002ee91457c2603856c185b0c7a1f2b674e0e492.zip |
Implement:
// fold (and (sext x), (sext y)) -> (sext (and x, y))
// fold (or (sext x), (sext y)) -> (sext (or x, y))
// fold (xor (sext x), (sext y)) -> (sext (xor x, y))
// fold (and (aext x), (aext y)) -> (aext (and x, y))
// fold (or (aext x), (aext y)) -> (aext (or x, y))
// fold (xor (aext x), (aext y)) -> (aext (xor x, y))
llvm-svn: 28123
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 12c5d40e093..3294b4ca580 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -1045,16 +1045,18 @@ SDOperand DAGCombiner::SimplifyBinOpWithSameOpcodeHands(SDNode *N) { MVT::ValueType VT = N0.getValueType(); assert(N0.getOpcode() == N1.getOpcode() && "Bad input!"); - // fold (and (zext x), (zext y)) -> (zext (and x, y)) - // fold (or (zext x), (zext y)) -> (zext (or x, y)) - // fold (xor (zext x), (zext y)) -> (zext (xor x, y)) - if (N0.getOpcode() == ISD::ZERO_EXTEND && + // For each of OP in AND/OR/XOR: + // fold (OP (zext x), (zext y)) -> (zext (OP x, y)) + // fold (OP (sext x), (sext y)) -> (sext (OP x, y)) + // fold (OP (aext x), (aext y)) -> (aext (OP x, y)) + if ((N0.getOpcode() == ISD::ZERO_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND|| + N0.getOpcode() == ISD::SIGN_EXTEND) && N0.getOperand(0).getValueType() == N1.getOperand(0).getValueType()) { SDOperand ORNode = DAG.getNode(N->getOpcode(), N0.getOperand(0).getValueType(), N0.getOperand(0), N1.getOperand(0)); AddToWorkList(ORNode.Val); - return DAG.getNode(ISD::ZERO_EXTEND, VT, ORNode); + return DAG.getNode(N0.getOpcode(), VT, ORNode); } // fold (and (trunc x), (trunc y)) -> (trunc (and x, y)) |