Skip to content
  1. May 24, 2004
  2. May 23, 2004
  3. May 21, 2004
  4. May 20, 2004
  5. May 19, 2004
  6. May 17, 2004
  7. May 14, 2004
  8. May 13, 2004
    • Chris Lattner's avatar
      This was not meant to be committed · 0026512b
      Chris Lattner authored
      llvm-svn: 13565
      0026512b
    • Chris Lattner's avatar
      Fix a nasty bug that caused us to unroll EXTREMELY large loops due to overflow · c12c945c
      Chris Lattner authored
      in the size calculation.
      
      This is not something you want to see:
      Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - UNROLLING!
      
      The problem was that 2*2147483648 == 0.
      
      Now we get:
      Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - TOO LARGE: 4294967296>100
      
      Thanks to some anonymous person playing with the demo page that repeatedly
      caused zion to go into swapping land.  That's one way to ensure you'll get
      a quick bugfix.  :)
      
      Testcase here: Transforms/LoopUnroll/2004-05-13-DontUnrollTooMuch.ll
      
      llvm-svn: 13564
      c12c945c
    • 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