Skip to content
  1. Jun 11, 2004
  2. Jun 10, 2004
  3. Jun 09, 2004
  4. Jun 04, 2004
  5. Jun 02, 2004
  6. May 23, 2004
  7. May 14, 2004
  8. 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
    • Chris Lattner's avatar
      Substantially improve code generation for address exposed locals (aka fixed · 2bb33259
      Chris Lattner authored
      sized allocas in the entry block).  Instead of generating code like this:
      
      entry:
        reg1024 = ESP+1234
      ... (much later)
        *reg1024 = 17
      
      
      Generate code that looks like this:
      entry:
        (no code generated)
      ... (much later)
        t = ESP+1234
        *t = 17
      
      The advantage being that we DRAMATICALLY reduce the register pressure for these
      silly temporaries (they were all being spilled to the stack, resulting in very
      silly code).  This is actually a manual implementation of rematerialization :)
      
      I have a patch to fold the alloca address computation into loads & stores, which
      will make this much better still, but just getting this right took way too much time
      and I'm sleepy.
      
      llvm-svn: 13554
      2bb33259
  9. May 12, 2004
  10. May 10, 2004
  11. May 07, 2004
  12. May 04, 2004
  13. May 01, 2004
  14. Apr 28, 2004
  15. Apr 23, 2004
  16. Apr 14, 2004
  17. Apr 13, 2004
Loading