Skip to content
  1. Jul 15, 2004
    • Chris Lattner's avatar
      Improve codegen for the LLVM offsetof/sizeof "operator". Before we compiled · 33930ad7
      Chris Lattner authored
      this LLVM function:
      
      int %foo() {
              ret int cast (int** getelementptr (int** null, int 1) to int)
      }
      
      into:
      
      foo:
              mov %EAX, 0
              lea %EAX, DWORD PTR [%EAX + 4]
              ret
      
      now we compile it into:
      
      foo:
              mov %EAX, 4
              ret
      
      This sequence is frequently generated by the MSIL front-end, and soon the malloc lowering pass and
      Java front-ends as well..
      
      -Chris
      
      llvm-svn: 14834
      33930ad7
  2. Jul 11, 2004
  3. Jul 04, 2004
  4. Jul 02, 2004
  5. Jun 29, 2004
  6. Jun 25, 2004
  7. Jun 21, 2004
  8. Jun 20, 2004
  9. Jun 18, 2004
  10. Jun 17, 2004
  11. Jun 15, 2004
  12. Jun 11, 2004
  13. Jun 10, 2004
  14. Jun 09, 2004
  15. Jun 04, 2004
  16. Jun 02, 2004
  17. May 23, 2004
  18. May 14, 2004
  19. May 13, 2004
    • Chris Lattner's avatar
      Two more improvements for null pointer handling: storing a null pointer · 8e7aea02
      Chris Lattner authored
      and passing a null pointer into a function.
      
      For this testcase:
      
      void %test(int** %X) {
        store int* null, int** %X
        call void %test(int** null)
        ret void
      }
      
      we now generate this:
      
      test:
              sub %ESP, 12
              mov %EAX, DWORD PTR [%ESP + 16]
              mov DWORD PTR [%EAX], 0
              mov DWORD PTR [%ESP], 0
              call test
              add %ESP, 12
              ret
      
      instead of this:
      
      test:
              sub %ESP, 12
              mov %EAX, DWORD PTR [%ESP + 16]
              mov %ECX, 0
              mov DWORD PTR [%EAX], %ECX
              mov %EAX, 0
              mov DWORD PTR [%ESP], %EAX
              call test
              add %ESP, 12
              ret
      
      llvm-svn: 13558
      8e7aea02
    • Chris Lattner's avatar
      Second half of my fixed-sized-alloca patch. This folds the LEA to compute · 593d22d6
      Chris Lattner authored
      the alloca address into common operations like loads/stores.
      
      In a simple testcase like this (which is just designed to excersize the
      alloca A, nothing more):
      
      int %test(int %X, bool %C) {
              %A = alloca int
              store int %X, int* %A
              store int* %A, int** %G
              br bool %C, label %T, label %F
      T:
              call int %test(int 1, bool false)
              %V = load int* %A
              ret int %V
      F:
              call int %test(int 123, bool true)
              %V2 = load int* %A
              ret int %V2
      }
      
      We now generate:
      
      test:
              sub %ESP, 12
              mov %EAX, DWORD PTR [%ESP + 16]
              mov %CL, BYTE PTR [%ESP + 20]
      ***     mov DWORD PTR [%ESP + 8], %EAX
              mov %EAX, OFFSET G
              lea %EDX, DWORD PTR [%ESP + 8]
              mov DWORD PTR [%EAX], %EDX
              test %CL, %CL
              je .LBB2 # PC rel: F
      .LBB1:  # T
              mov DWORD PTR [%ESP], 1
              mov DWORD PTR [%ESP + 4], 0
              call test
      ***     mov %EAX, DWORD PTR [%ESP + 8]
              add %ESP, 12
              ret
      .LBB2:  # F
              mov DWORD PTR [%ESP], 123
              mov DWORD PTR [%ESP + 4], 1
              call test
      ***     mov %EAX, DWORD PTR [%ESP + 8]
              add %ESP, 12
              ret
      
      Instead of:
      
      test:
              sub %ESP, 20
              mov %EAX, DWORD PTR [%ESP + 24]
              mov %CL, BYTE PTR [%ESP + 28]
      ***     lea %EDX, DWORD PTR [%ESP + 16]
      ***     mov DWORD PTR [%EDX], %EAX
              mov %EAX, OFFSET G
              mov DWORD PTR [%EAX], %EDX
              test %CL, %CL
      ***     mov DWORD PTR [%ESP + 12], %EDX
              je .LBB2 # PC rel: F
      .LBB1:  # T
              mov DWORD PTR [%ESP], 1
              mov %EAX, 0
              mov DWORD PTR [%ESP + 4], %EAX
              call test
      ***     mov %EAX, DWORD PTR [%ESP + 12]
      ***     mov %EAX, DWORD PTR [%EAX]
              add %ESP, 20
              ret
      .LBB2:  # F
              mov DWORD PTR [%ESP], 123
              mov %EAX, 1
              mov DWORD PTR [%ESP + 4], %EAX
              call test
      ***     mov %EAX, DWORD PTR [%ESP + 12]
      ***     mov %EAX, DWORD PTR [%EAX]
              add %ESP, 20
              ret
      
      llvm-svn: 13557
      593d22d6
Loading