diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-09-18 06:02:59 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-09-18 06:02:59 +0000 | 
| commit | 01f56c68e947157ab3aa6a3bfde7ebde73d18821 (patch) | |
| tree | 400a568cdf15f159db9a7127141b841351dd0acc /llvm/lib/Transforms/Utils | |
| parent | 4ebc8ab4e0bb69dd7abfe04f80e49e5f217cdeb9 (diff) | |
| download | bcm5719-llvm-01f56c68e947157ab3aa6a3bfde7ebde73d18821.tar.gz bcm5719-llvm-01f56c68e947157ab3aa6a3bfde7ebde73d18821.zip | |
Generalize this transform, using MaskedValueIsZero, allowing us to compile:
struct S { unsigned int i : 6, j : 11, k : 15; } b;
void plus3 (unsigned int x) { b.k += x; }
To:
plus3:
        mov %EAX, DWORD PTR [%ESP + 4]
        shl %EAX, 17
        add DWORD PTR [b], %EAX
        ret
instead of:
plus3:
        mov %EAX, DWORD PTR [%ESP + 4]
        shl %EAX, 17
        mov %ECX, DWORD PTR [b]
        add %EAX, %ECX
        and %EAX, -131072
        and %ECX, 131071
        or %ECX, %EAX
        mov DWORD PTR [b], %ECX
        ret
llvm-svn: 23384
Diffstat (limited to 'llvm/lib/Transforms/Utils')
0 files changed, 0 insertions, 0 deletions

