diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-05-10 13:06:26 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-05-10 13:06:26 +0000 |
commit | cd4d913336106b8919d3b8bc7ad6956ef50e2f41 (patch) | |
tree | 0a0b22885d6d7b6b12e51e16ebcc126a6f66f9f6 /llvm/lib/CodeGen | |
parent | 21c867c26e11d414a65a7158502945bac307e033 (diff) | |
download | bcm5719-llvm-cd4d913336106b8919d3b8bc7ad6956ef50e2f41.tar.gz bcm5719-llvm-cd4d913336106b8919d3b8bc7ad6956ef50e2f41.zip |
[DAGCombiner] Dropped explicit (sra 0, x) -> 0 and (sra -1, x) -> 0 folds.
These are both handled (and tested) by the earlier ComputeNumSignBits == EltSizeInBits fold.
llvm-svn: 302651
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 2436a81259f..1da8fe76263 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -5534,6 +5534,8 @@ SDValue DAGCombiner::visitSRA(SDNode *N) { } // Arithmetic shifting an all-sign-bit value is a no-op. + // fold (sra 0, x) -> 0 + // fold (sra -1, x) -> -1 if (DAG.ComputeNumSignBits(N0) == OpSizeInBits) return N0; @@ -5548,12 +5550,6 @@ SDValue DAGCombiner::visitSRA(SDNode *N) { ConstantSDNode *N0C = getAsNonOpaqueConstant(N0); if (N0C && N1C && !N1C->isOpaque()) return DAG.FoldConstantArithmetic(ISD::SRA, SDLoc(N), VT, N0C, N1C); - // fold (sra 0, x) -> 0 - if (isNullConstant(N0)) - return N0; - // fold (sra -1, x) -> -1 - if (isAllOnesConstant(N0)) - return N0; // fold (sra x, c >= size(x)) -> undef if (N1C && N1C->getAPIntValue().uge(OpSizeInBits)) return DAG.getUNDEF(VT); |