diff options
author | Chris Lattner <sabre@nondot.org> | 2007-04-18 03:06:49 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-04-18 03:06:49 +0000 |
commit | 61a4c072b9407983df1a6c965ada57474766b282 (patch) | |
tree | adab0cf1e7c75eb0e49854dc082907403a0edd41 /lib | |
parent | ec06e9a6707b9b00889e34ebad7cd3f20cb70bb6 (diff) | |
download | llvm-61a4c072b9407983df1a6c965ada57474766b282.tar.gz llvm-61a4c072b9407983df1a6c965ada57474766b282.tar.bz2 llvm-61a4c072b9407983df1a6c965ada57474766b282.tar.xz |
allow SRL to simplify its operands, as it doesn't demand all bits as input.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36245 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 20b9a588e2..88596d65db 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -1728,7 +1728,7 @@ SDOperand DAGCombiner::visitSHL(SDNode *N) { // if (shl x, c) is known to be zero, return 0 if (TLI.MaskedValueIsZero(SDOperand(N, 0), MVT::getIntVTBitMask(VT))) return DAG.getConstant(0, VT); - if (SimplifyDemandedBits(SDOperand(N, 0))) + if (N1C && SimplifyDemandedBits(SDOperand(N, 0))) return SDOperand(N, 0); // fold (shl (shl x, c1), c2) -> 0 or (shl x, c1+c2) if (N1C && N0.getOpcode() == ISD::SHL && @@ -1907,6 +1907,12 @@ SDOperand DAGCombiner::visitSRL(SDNode *N) { return DAG.getNode(ISD::XOR, VT, Op, DAG.getConstant(1, VT)); } } + + // fold operands of srl based on knowledge that the low bits are not + // demanded. + if (N1C && SimplifyDemandedBits(SDOperand(N, 0))) + return SDOperand(N, 0); + return SDOperand(); } |