diff options
| author | Dan Gohman <gohman@apple.com> | 2010-09-17 20:24:24 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2010-09-17 20:24:24 +0000 |
| commit | 534db8a5c8ec1416185ed651279455ef318c876f (patch) | |
| tree | d6e93e9e988748c77efa32f2c6fc2415d9624e29 /llvm/lib/Target/X86/X86InstrInfo.cpp | |
| parent | f3ceecec7e9a1aecf072ec75d653c6d1a996c0f5 (diff) | |
| download | bcm5719-llvm-534db8a5c8ec1416185ed651279455ef318c876f.tar.gz bcm5719-llvm-534db8a5c8ec1416185ed651279455ef318c876f.zip | |
Avoid emitting a PIC base register if no PIC addresses are needed.
This fixes rdar://8396318.
llvm-svn: 114201
Diffstat (limited to 'llvm/lib/Target/X86/X86InstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index 5280940cf43..e0165e11b86 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -3108,6 +3108,13 @@ namespace { if (TM->getRelocationModel() != Reloc::PIC_) return false; + X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); + unsigned GlobalBaseReg = X86FI->getGlobalBaseReg(); + + // If we didn't need a GlobalBaseReg, don't insert code. + if (GlobalBaseReg == 0) + return false; + // Insert the set of GlobalBaseReg into the first MBB of the function MachineBasicBlock &FirstMBB = MF.front(); MachineBasicBlock::iterator MBBI = FirstMBB.begin(); @@ -3119,7 +3126,7 @@ namespace { if (TM->getSubtarget<X86Subtarget>().isPICStyleGOT()) PC = RegInfo.createVirtualRegister(X86::GR32RegisterClass); else - PC = TII->getGlobalBaseReg(&MF); + PC = GlobalBaseReg; // Operand of MovePCtoStack is completely ignored by asm printer. It's // only used in JIT code emission as displacement to pc. @@ -3128,7 +3135,6 @@ namespace { // If we're using vanilla 'GOT' PIC style, we should use relative addressing // not to pc, but to _GLOBAL_OFFSET_TABLE_ external. if (TM->getSubtarget<X86Subtarget>().isPICStyleGOT()) { - unsigned GlobalBaseReg = TII->getGlobalBaseReg(&MF); // Generate addl $__GLOBAL_OFFSET_TABLE_ + [.-piclabel], %some_register BuildMI(FirstMBB, MBBI, DL, TII->get(X86::ADD32ri), GlobalBaseReg) .addReg(PC).addExternalSymbol("_GLOBAL_OFFSET_TABLE_", |

