mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 02:29:18 +00:00
Pass a GlobalAddress instead of an ExternalSymbol to LowerCallTo in
MipsTargetLowering::LowerGlobalTLSAddress. This is necessary to have call16(__tls_get_addr) emitted instead of got_disp(__tls_get_addr) when the target is Mips64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146183 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
120313435d
commit
7a7194b529
@ -1550,19 +1550,26 @@ LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const
|
||||
SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT,
|
||||
0, MipsII::MO_TLSGD);
|
||||
SDValue Argument = DAG.getNode(MipsISD::WrapperPIC, dl, PtrVT, TGA);
|
||||
unsigned PtrSize = PtrVT.getSizeInBits();
|
||||
IntegerType *PtrTy = Type::getIntNTy(*DAG.getContext(), PtrSize);
|
||||
|
||||
SmallVector<Type*, 1> Params;
|
||||
Params.push_back(PtrTy);
|
||||
FunctionType *FuncTy = FunctionType::get(PtrTy, Params, false);
|
||||
Function *Func = Function::Create(FuncTy, GlobalValue::ExternalLinkage,
|
||||
"__tls_get_addr");
|
||||
SDValue TlsGetAddr = DAG.getGlobalAddress(Func, dl, PtrVT);
|
||||
|
||||
ArgListTy Args;
|
||||
ArgListEntry Entry;
|
||||
Entry.Node = Argument;
|
||||
unsigned PtrSize = PtrVT.getSizeInBits();
|
||||
IntegerType *PtrTy = Type::getIntNTy(*DAG.getContext(), PtrSize);
|
||||
Entry.Ty = PtrTy;
|
||||
Args.push_back(Entry);
|
||||
|
||||
std::pair<SDValue, SDValue> CallResult =
|
||||
LowerCallTo(DAG.getEntryNode(), PtrTy,
|
||||
false, false, false, false, 0, CallingConv::C, false, true,
|
||||
DAG.getExternalSymbol("__tls_get_addr", PtrVT), Args, DAG,
|
||||
dl);
|
||||
TlsGetAddr, Args, DAG, dl);
|
||||
|
||||
return CallResult.first;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user