aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2010-03-25 00:10:31 +0000
committerEvan Cheng <evan.cheng@apple.com>2010-03-25 00:10:31 +0000
commitcb0f06e05c55b4705b8bb9376729427386f90ba8 (patch)
treef434a292151448463ac89b7b2f08ecc582a2c6b8 /lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
parent6a4824c466bbfbcbe7dc4d95ec1e23a14ec73d87 (diff)
Disable folding loads into tail call in 32-bit PIC mode. It can introduce illegal code like this:
addl $12, %esp popl %esi popl %edi popl %ebx popl %ebp jmpl *__Block_deallocator-L1$pb(%esi) # TAILCALL The problem is the global base register is assigned GR32 register class. TCRETURNmi needs the registers making up the address mode to have the GR32_TC register class. The *proper* fix is for X86DAGToDAGISel::getGlobalBaseReg() to return a copy from the global base register of the machine function rather than returning the register itself. But that has the potential of causing it to be coalesced to a more restrictive register class: GR32_TC. It can introduce additional copies and spills. For something as important the PIC base, it's not worth it especially since this is not an issue on 64-bit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99455 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp')
0 files changed, 0 insertions, 0 deletions