From 6fcbd6961d9f14d75e2b314b06ca823d43a70353 Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Fri, 21 Apr 2006 22:04:15 +0000 Subject: [PATCH] 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 --- lib/Target/PowerPC/PPCCodeEmitter.cpp | 18 ++---------------- lib/Target/PowerPC/PPCJITInfo.cpp | 13 +------------ lib/Target/PowerPC/PPCTargetMachine.cpp | 2 +- 3 files changed, 4 insertions(+), 29 deletions(-) diff --git a/lib/Target/PowerPC/PPCCodeEmitter.cpp b/lib/Target/PowerPC/PPCCodeEmitter.cpp index efa32d7331a..fb269e96054 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 872dff2fb5a..6257ebd6cb6 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 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 94136a45696..484beb52222 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()));