Two more improvements for null pointer handling: storing a null pointer
authorChris Lattner <sabre@nondot.org>
Thu, 13 May 2004 15:26:48 +0000 (15:26 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 13 May 2004 15:26:48 +0000 (15:26 +0000)
commitb7cb9ffd34dfa5e167d511df589e1a045c821b4a
tree568153ff762df16f92e0883f470da0322d426bd3
parent9f1b5310904b66bf7aa5593beb0bfae2bb895db8
Two more improvements for null pointer handling: storing a null pointer
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13558 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/InstSelectSimple.cpp
lib/Target/X86/X86ISelSimple.cpp