diff options
Diffstat (limited to 'contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp')
| -rw-r--r-- | contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 1247e860f733..23eeeed4dd8f 100644 --- a/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -1653,6 +1653,8 @@ SDValue PPCTargetLowering::LowerGlobalTLSAddress(SDValue Op,    const GlobalValue *GV = GA->getGlobal();    EVT PtrVT = getPointerTy();    bool is64bit = Subtarget.isPPC64(); +  const Module *M = DAG.getMachineFunction().getFunction()->getParent(); +  PICLevel::Level picLevel = M->getPICLevel();    TLSModel::Model Model = getTargetMachine().getTLSModel(GV); @@ -1691,7 +1693,10 @@ SDValue PPCTargetLowering::LowerGlobalTLSAddress(SDValue Op,        GOTPtr = DAG.getNode(PPCISD::ADDIS_TLSGD_HA, dl, PtrVT,                                     GOTReg, TGA);      } else { -      GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT); +      if (picLevel == PICLevel::Small) +        GOTPtr = DAG.getNode(PPCISD::GlobalBaseReg, dl, PtrVT); +      else +        GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT);      }      SDValue GOTEntry = DAG.getNode(PPCISD::ADDI_TLSGD_L, dl, PtrVT,                                     GOTPtr, TGA); @@ -1721,7 +1726,10 @@ SDValue PPCTargetLowering::LowerGlobalTLSAddress(SDValue Op,        GOTPtr = DAG.getNode(PPCISD::ADDIS_TLSLD_HA, dl, PtrVT,                             GOTReg, TGA);      } else { -      GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT); +      if (picLevel == PICLevel::Small) +        GOTPtr = DAG.getNode(PPCISD::GlobalBaseReg, dl, PtrVT); +      else +        GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT);      }      SDValue GOTEntry = DAG.getNode(PPCISD::ADDI_TLSLD_L, dl, PtrVT,                                     GOTPtr, TGA);  | 
