Fix PR6696 and PR6663
authorJim Grosbach <grosbach@apple.com>
Tue, 6 Apr 2010 20:26:37 +0000 (20:26 +0000)
committerJim Grosbach <grosbach@apple.com>
Tue, 6 Apr 2010 20:26:37 +0000 (20:26 +0000)
commitfa85eb62378900a884a7eb4933a9deb6513d26ab
treeba680cbed4da06d765a15ea16ed65e7bbb845298
parentaa59c88a6e963cf0f71511ae81784da2873dbc78
Fix PR6696 and PR6663

When a frame pointer is not otherwise required, and dynamic stack alignment
is necessary solely due to the spilling of a register with larger alignment
requirements than the default stack alignment, the frame pointer can be both
used as a general purpose register and a frame pointer. That goes poorly, for
obvious reasons. This patch brings back a bit of old logic for identifying
the use of such registers and conservatively reserves the frame pointer
during register allocation in such cases.

For now, implement for X86 only since it's 32-bit linux which is hitting this,
and we want a targeted fix for 2.7. As a follow-on, this will be expanded
to handle other targets, as theoretically the problem could arise elsewhere
as well.

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