Change the PPC JIT to use a Static relocation model
authorNate Begeman <natebegeman@mac.com>
Fri, 21 Apr 2006 22:04:15 +0000 (22:04 +0000)
committerNate Begeman <natebegeman@mac.com>
Fri, 21 Apr 2006 22:04:15 +0000 (22:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27937 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCCodeEmitter.cpp
lib/Target/PowerPC/PPCJITInfo.cpp
lib/Target/PowerPC/PPCTargetMachine.cpp

index efa32d7331a651278661f958b707021d836aabfe..fb269e960544f26a5c991cc1d46d125146e251f2 100644 (file)
@@ -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;
       }
     }
index 872dff2fb5ac21c2e129cc72af6b13e13349347a..6257ebd6cb6f257afe29b8acbf548a2c38cb01d8 100644 (file)
@@ -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();
index 94136a456962b19723798366552af9583c221460..484beb5222213c6f49a1292622895255a6ab975f 100644 (file)
@@ -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()));