aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorNate Begeman <natebegeman@mac.com>2006-04-21 22:04:15 +0000
committerNate Begeman <natebegeman@mac.com>2006-04-21 22:04:15 +0000
commit6fcbd6961d9f14d75e2b314b06ca823d43a70353 (patch)
tree3685acfbbe1c531a2a44741f8b4746eb8921621f /lib
parent99d3c276cc395ef451b0d601f57f5c8f134d9c75 (diff)
downloadexternal_llvm-6fcbd6961d9f14d75e2b314b06ca823d43a70353.zip
external_llvm-6fcbd6961d9f14d75e2b314b06ca823d43a70353.tar.gz
external_llvm-6fcbd6961d9f14d75e2b314b06ca823d43a70353.tar.bz2
Change the PPC JIT to use a Static relocation model
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27937 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/PowerPC/PPCCodeEmitter.cpp18
-rw-r--r--lib/Target/PowerPC/PPCJITInfo.cpp13
-rw-r--r--lib/Target/PowerPC/PPCTargetMachine.cpp2
3 files changed, 4 insertions, 29 deletions
diff --git a/lib/Target/PowerPC/PPCCodeEmitter.cpp b/lib/Target/PowerPC/PPCCodeEmitter.cpp
index efa32d7..fb269e9 100644
--- a/lib/Target/PowerPC/PPCCodeEmitter.cpp
+++ b/lib/Target/PowerPC/PPCCodeEmitter.cpp
@@ -157,11 +157,6 @@ int PPCCodeEmitter::getMachineOpValue(MachineInstr &MI, MachineOperand &MO) {
} else if (MO.isImmediate()) {
rv = MO.getImmedValue();
} else if (MO.isGlobalAddress() || MO.isExternalSymbol()) {
- bool isExternal = MO.isExternalSymbol() ||
- MO.getGlobal()->hasWeakLinkage() ||
- MO.getGlobal()->hasLinkOnceLinkage() ||
- (MO.getGlobal()->isExternal() &&
- !MO.getGlobal()->hasNotBeenReadFromBytecode());
unsigned Reloc = 0;
if (MI.getOpcode() == PPC::BL)
Reloc = PPC::reloc_pcrel_bx;
@@ -169,15 +164,9 @@ int PPCCodeEmitter::getMachineOpValue(MachineInstr &MI, MachineOperand &MO) {
switch (MI.getOpcode()) {
default: MI.dump(); assert(0 && "Unknown instruction for relocation!");
case PPC::LIS:
- if (isExternal)
- Reloc = PPC::reloc_absolute_ptr_high; // Pointer to stub
- else
- Reloc = PPC::reloc_absolute_high; // Pointer to symbol
+ Reloc = PPC::reloc_absolute_high; // Pointer to symbol
break;
case PPC::LA:
- assert(!isExternal && "Something in the ISEL changed\n");
- Reloc = PPC::reloc_absolute_low;
- break;
case PPC::LBZ:
case PPC::LHA:
case PPC::LHZ:
@@ -189,10 +178,7 @@ int PPCCodeEmitter::getMachineOpValue(MachineInstr &MI, MachineOperand &MO) {
case PPC::STW:
case PPC::STFS:
case PPC::STFD:
- if (isExternal)
- Reloc = PPC::reloc_absolute_ptr_low;
- else
- Reloc = PPC::reloc_absolute_low;
+ Reloc = PPC::reloc_absolute_low;
break;
}
}
diff --git a/lib/Target/PowerPC/PPCJITInfo.cpp b/lib/Target/PowerPC/PPCJITInfo.cpp
index 872dff2..6257ebd 100644
--- a/lib/Target/PowerPC/PPCJITInfo.cpp
+++ b/lib/Target/PowerPC/PPCJITInfo.cpp
@@ -201,19 +201,8 @@ void PPCJITInfo::relocate(void *Function, MachineRelocation *MR,
"Relocation out of range!");
*RelocPos |= (ResultPtr & ((1 << 24)-1)) << 2;
break;
-
case PPC::reloc_absolute_ptr_high: // Pointer relocations.
- case PPC::reloc_absolute_ptr_low: {
- // Pointer relocations are used for the PPC external stubs and lazy
- // resolver pointers that the Darwin ABI likes to use. Basically, the
- // address of the global is actually stored in memory, and the address of
- // the pointer is relocated into instructions instead of the pointer
- // itself. Because we have to keep the mapping anyway, we just return
- // pointers to the values in the map as our new location.
- static std::set<void*> Pointers;
- ResultPtr = (intptr_t)&*Pointers.insert((void*)ResultPtr).first;
- }
- // FALL THROUGH
+ case PPC::reloc_absolute_ptr_low:
case PPC::reloc_absolute_high: // high bits of ref -> low 16 of instr
case PPC::reloc_absolute_low: // low bits of ref -> low 16 of instr
ResultPtr += MR->getConstantVal();
diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
index 94136a4..484beb5 100644
--- a/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -130,7 +130,7 @@ bool PPCTargetMachine::addPassesToEmitFile(PassManager &PM,
void PPCJITInfo::addPassesToJITCompile(FunctionPassManager &PM) {
// The JIT should use dynamic-no-pic relocation model.
- TM.setRelocationModel(Reloc::DynamicNoPIC);
+ TM.setRelocationModel(Reloc::Static);
// Run loop strength reduction before anything else.
PM.add(createLoopStrengthReducePass(TM.getTargetLowering()));