diff options
author | Chris Lattner <sabre@nondot.org> | 2007-04-17 21:14:16 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-04-17 21:14:16 +0000 |
commit | 895c4ab564c145d16a585201ea49b91541d806b6 (patch) | |
tree | 62f66e25a48fdb2e404d16a9e955a30c4f2f4d34 /lib/Analysis/ScalarEvolutionExpander.cpp | |
parent | e54ec7ab0fe5a233032a7e429272c926385d1d24 (diff) |
Fold (x << c1)>> c2 into a single shift if the bits shifted out aren't used.
This compiles:
int baz(long long a) { return (short)(((int)(a >>24)) >> 9); }
into:
_baz:
srwi r2, r3, 1
extsh r3, r2
blr
on PPC, instead of:
_baz:
slwi r2, r3, 8
srwi r2, r2, 9
extsh r3, r2
blr
GCC produces:
_baz:
srwi r10,r4,24
insrwi r10,r3,24,0
srawi r9,r3,24
srawi r3,r10,9
extsh r3,r3
blr
This implements CodeGen/PowerPC/shl_elim.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36221 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ScalarEvolutionExpander.cpp')
0 files changed, 0 insertions, 0 deletions