Skip to content
  1. May 23, 2004
  2. May 14, 2004
  3. 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
  4. May 12, 2004
  5. May 10, 2004
  6. May 07, 2004
  7. May 04, 2004
  8. May 01, 2004
  9. Apr 28, 2004
  10. Apr 14, 2004
  11. Apr 13, 2004
  12. Apr 12, 2004
  13. Apr 11, 2004
  14. Apr 10, 2004
  15. Apr 09, 2004
  16. Apr 08, 2004
    • John Criswell's avatar
      Added the llvm.readport and llvm.writeport intrinsics for x86. These do · 10db062d
      John Criswell authored
      I/O port instructions on x86.  The specific code sequence is tailored to
      the parameters and return value of the intrinsic call.
      Added the ability for implicit defintions to be printed in the Instruction
      Printer.
      Added the ability for RawFrm instruction to print implict uses and
      defintions with correct comma output.  This required adjustment to some
      methods so that a leading comma would or would not be printed.
      
      llvm-svn: 12782
      10db062d
  17. Apr 06, 2004
    • Chris Lattner's avatar
      Fix PR313: [x86] JIT miscompiles unsigned short to floating point · 4b936125
      Chris Lattner authored
      llvm-svn: 12711
      4b936125
    • Chris Lattner's avatar
      Fix a minor bug in previous checking · 19c8b13e
      Chris Lattner authored
      Enable folding of long seteq/setne comparisons into branches and select instructions
      Implement unfolded long relational comparisons against a constants a bit more efficiently
      
      Folding comparisons changes code that looks like this:
              mov %EAX, DWORD PTR [%ESP + 4]
              mov %EDX, DWORD PTR [%ESP + 8]
              mov %ECX, %EAX
              or %ECX, %EDX
              sete %CL
              test %CL, %CL
              je .LBB2 # PC rel: F
      
      into code that looks like this:
              mov %EAX, DWORD PTR [%ESP + 4]
              mov %EDX, DWORD PTR [%ESP + 8]
              mov %ECX, %EAX
              or %ECX, %EDX
              jne .LBB2 # PC rel: F
      
      This speeds up 186.crafty by 6% with llc-ls.
      
      llvm-svn: 12702
      19c8b13e
Loading