DWARF requires frame moves be specified at specific times. If you have a
authorBill Wendling <isanbard@gmail.com>
Tue, 7 Jul 2009 21:53:07 +0000 (21:53 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 7 Jul 2009 21:53:07 +0000 (21:53 +0000)
commit66c6324fcf0db0f834e34dbb0e82a5038672eda3
tree779223b3310303927b7dc14ba077e7d1de21f435
parent62e744b555d48b4c8b9023739fef8ae403bb20e8
DWARF requires frame moves be specified at specific times. If you have a
prologue like this:

__Z3fooi:
Leh_func_begin1:
LBB1_0: ## entry
        pushl   %ebp
Llabel1:
        movl    %esp, %ebp
Llabel2:
        pushl   %esi
Llabel3:
        subl    $20, %esp
        call    "L1$pb"
"L1$pb":
        popl    %esi

The "pushl %ebp" needs a table entry specifying the offset. The "movl %esp,
%ebp" makes %ebp the new stack frame register, so that needs to be specified in
DWARF. And "pushl %esi" saves the callee-saved %esi register, which also needs
to be specified in DWARF.

Before, all of this logic was in one method. This didn't work too well, because
as you can see there are multiple FDE line entries that need to be created.

This fix creates the "MachineMove" objects directly when they're needed; instead
of waiting until the end, and losing information.

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