diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-01-06 07:52:12 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-01-06 07:52:12 +0000 |
| commit | ad0124c188b051fd4221f4691f573c4c75f1c9d6 (patch) | |
| tree | 18fd700dbaeed415dfbce0215bffeb41dd4aa34f /lib/CodeGen/MachineFunction.cpp | |
| parent | 6c7fbb85031dfba863a7e0a950a3c4d40627a819 (diff) | |
Enhance the shift-shift folding code to allow a no-op cast to occur in between
the shifts.
This allows us to fold this (which is the 'integer add a constant' sequence
from cozmic's scheme compmiler):
int %x(uint %anf-temporary776) {
%anf-temporary777 = shr uint %anf-temporary776, ubyte 1
%anf-temporary800 = cast uint %anf-temporary777 to int
%anf-temporary804 = shl int %anf-temporary800, ubyte 1
%anf-temporary805 = add int %anf-temporary804, -2
%anf-temporary806 = or int %anf-temporary805, 1
ret int %anf-temporary806
}
into this:
int %x(uint %anf-temporary776) {
%anf-temporary776 = cast uint %anf-temporary776 to int
%anf-temporary776.mask1 = add int %anf-temporary776, -2
%anf-temporary805 = or int %anf-temporary776.mask1, 1
ret int %anf-temporary805
}
note that instcombine already knew how to eliminate the AND that the two
shifts fold into. This is tested by InstCombine/shift.ll:test26
-Chris
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25128 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineFunction.cpp')
0 files changed, 0 insertions, 0 deletions
