diff --git a/llvm/include/llvm/CodeGen/SelectionDAG.h b/llvm/include/llvm/CodeGen/SelectionDAG.h index 37a43aaf1d0c7..18dee551a76b2 100644 --- a/llvm/include/llvm/CodeGen/SelectionDAG.h +++ b/llvm/include/llvm/CodeGen/SelectionDAG.h @@ -793,6 +793,7 @@ class SelectionDAG { // to provide debug info for the BB at that time, so keep this one around. LLVM_ABI SDValue getBasicBlock(MachineBasicBlock *MBB); LLVM_ABI SDValue getExternalSymbol(const char *Sym, EVT VT); + LLVM_ABI SDValue getExternalSymbol(RTLIB::LibcallImpl LCImpl, EVT VT); LLVM_ABI SDValue getTargetExternalSymbol(const char *Sym, EVT VT, unsigned TargetFlags = 0); LLVM_ABI SDValue getMCSymbol(MCSymbol *Sym, EVT VT); diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 1eb18e10ba2d9..c46264e09bc46 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -2127,8 +2127,9 @@ SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node, bool IsSigned, EVT RetVT) { EVT CodePtrTy = TLI.getPointerTy(DAG.getDataLayout()); SDValue Callee; - if (const char *LibcallName = TLI.getLibcallName(LC)) - Callee = DAG.getExternalSymbol(LibcallName, CodePtrTy); + RTLIB::LibcallImpl LCImpl = TLI.getLibcallImpl(LC); + if (LCImpl != RTLIB::Unsupported) + Callee = DAG.getExternalSymbol(LCImpl, CodePtrTy); else { Callee = DAG.getPOISON(CodePtrTy); DAG.getContext()->emitError(Twine("no libcall available for ") + @@ -2157,7 +2158,7 @@ SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node, bool signExtend = TLI.shouldSignExtendTypeInLibCall(RetTy, IsSigned); CLI.setDebugLoc(SDLoc(Node)) .setChain(InChain) - .setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, + .setLibCallee(TLI.getLibcallImplCallingConv(LCImpl), RetTy, Callee, std::move(Args)) .setTailCall(isTailCall) .setSExtResult(signExtend) @@ -2392,8 +2393,7 @@ SelectionDAGLegalize::ExpandDivRemLibCall(SDNode *Node, } SDValue Callee = - DAG.getExternalSymbol(TLI.getLibcallImplName(LibcallImpl).data(), - TLI.getPointerTy(DAG.getDataLayout())); + DAG.getExternalSymbol(LibcallImpl, TLI.getPointerTy(DAG.getDataLayout())); SDLoc dl(Node); TargetLowering::CallLoweringInfo CLI(DAG); @@ -2461,10 +2461,9 @@ SDValue SelectionDAGLegalize::ExpandSincosStretLibCall(SDNode *Node) const { Type *SincosStretRetTy = FuncTy->getReturnType(); CallingConv::ID CallConv = CallsInfo.getLibcallImplCallingConv(SincosStret); - StringRef LibcallImplName = CallsInfo.getLibcallImplName(SincosStret); - SDValue Callee = DAG.getExternalSymbol(LibcallImplName.data(), - TLI.getProgramPointerTy(DL)); + SDValue Callee = + DAG.getExternalSymbol(SincosStret, TLI.getProgramPointerTy(DL)); TargetLowering::ArgListTy Args; SDValue SRet; diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp index 8410f47fd5417..08c6b90cc8a74 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp @@ -5213,8 +5213,7 @@ void DAGTypeLegalizer::ExpandIntRes_XMULO(SDNode *N, Entry.IsZExt = false; Args.push_back(Entry); - SDValue Func = - DAG.getExternalSymbol(TLI.getLibcallImplName(LCImpl).data(), PtrVT); + SDValue Func = DAG.getExternalSymbol(LCImpl, PtrVT); TargetLowering::CallLoweringInfo CLI(DAG); CLI.setDebugLoc(dl) diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index b009e6a3d5f5f..917469e73e463 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -2066,6 +2066,11 @@ SDValue SelectionDAG::getExternalSymbol(const char *Sym, EVT VT) { return SDValue(N, 0); } +SDValue SelectionDAG::getExternalSymbol(RTLIB::LibcallImpl Libcall, EVT VT) { + StringRef SymName = TLI->getLibcallImplName(Libcall); + return getExternalSymbol(SymName.data(), VT); +} + SDValue SelectionDAG::getMCSymbol(MCSymbol *Sym, EVT VT) { SDNode *&N = MCSymbols[Sym]; if (N) diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp index 172c7485e108b..c65ddc6c28986 100644 --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -187,8 +187,8 @@ TargetLowering::makeLibCall(SelectionDAG &DAG, RTLIB::LibcallImpl LibcallImpl, Args.push_back(Entry); } - SDValue Callee = DAG.getExternalSymbol(getLibcallImplName(LibcallImpl).data(), - getPointerTy(DAG.getDataLayout())); + SDValue Callee = + DAG.getExternalSymbol(LibcallImpl, getPointerTy(DAG.getDataLayout())); Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext()); Type *OrigRetTy = RetTy; @@ -12261,8 +12261,8 @@ bool TargetLowering::expandMultipleResultFPLibCall( ? Node->getValueType(*CallRetResNo).getTypeForEVT(Ctx) : Type::getVoidTy(Ctx); SDValue InChain = StoresInChain ? StoresInChain : DAG.getEntryNode(); - SDValue Callee = DAG.getExternalSymbol(getLibcallImplName(LibcallImpl).data(), - getPointerTy(DAG.getDataLayout())); + SDValue Callee = + DAG.getExternalSymbol(LibcallImpl, getPointerTy(DAG.getDataLayout())); TargetLowering::CallLoweringInfo CLI(DAG); CLI.setDebugLoc(DL).setChain(InChain).setLibCallee( getLibcallImplCallingConv(LibcallImpl), RetType, Callee, std::move(Args));