Skip to content
  • Chris Lattner's avatar
    Generalize this transform, using MaskedValueIsZero, allowing us to compile: · 01f56c68
    Chris Lattner authored
    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
    01f56c68
Loading