Skip to content

Commit 2ddaf38

Browse files
committed
DAG: Add overload of getExternalSymbol using RTLIB::LibcallImpl
1 parent cf50823 commit 2ddaf38

File tree

5 files changed

+18
-14
lines changed

5 files changed

+18
-14
lines changed

llvm/include/llvm/CodeGen/SelectionDAG.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,7 @@ class SelectionDAG {
793793
// to provide debug info for the BB at that time, so keep this one around.
794794
LLVM_ABI SDValue getBasicBlock(MachineBasicBlock *MBB);
795795
LLVM_ABI SDValue getExternalSymbol(const char *Sym, EVT VT);
796+
LLVM_ABI SDValue getExternalSymbol(RTLIB::LibcallImpl LCImpl, EVT VT);
796797
LLVM_ABI SDValue getTargetExternalSymbol(const char *Sym, EVT VT,
797798
unsigned TargetFlags = 0);
798799
LLVM_ABI SDValue getMCSymbol(MCSymbol *Sym, EVT VT);

llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2127,8 +2127,9 @@ SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node,
21272127
bool IsSigned, EVT RetVT) {
21282128
EVT CodePtrTy = TLI.getPointerTy(DAG.getDataLayout());
21292129
SDValue Callee;
2130-
if (const char *LibcallName = TLI.getLibcallName(LC))
2131-
Callee = DAG.getExternalSymbol(LibcallName, CodePtrTy);
2130+
RTLIB::LibcallImpl LCImpl = TLI.getLibcallImpl(LC);
2131+
if (LCImpl != RTLIB::Unsupported)
2132+
Callee = DAG.getExternalSymbol(LCImpl, CodePtrTy);
21322133
else {
21332134
Callee = DAG.getPOISON(CodePtrTy);
21342135
DAG.getContext()->emitError(Twine("no libcall available for ") +
@@ -2157,7 +2158,7 @@ SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node,
21572158
bool signExtend = TLI.shouldSignExtendTypeInLibCall(RetTy, IsSigned);
21582159
CLI.setDebugLoc(SDLoc(Node))
21592160
.setChain(InChain)
2160-
.setLibCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee,
2161+
.setLibCallee(TLI.getLibcallImplCallingConv(LCImpl), RetTy, Callee,
21612162
std::move(Args))
21622163
.setTailCall(isTailCall)
21632164
.setSExtResult(signExtend)
@@ -2392,8 +2393,7 @@ SelectionDAGLegalize::ExpandDivRemLibCall(SDNode *Node,
23922393
}
23932394

23942395
SDValue Callee =
2395-
DAG.getExternalSymbol(TLI.getLibcallImplName(LibcallImpl).data(),
2396-
TLI.getPointerTy(DAG.getDataLayout()));
2396+
DAG.getExternalSymbol(LibcallImpl, TLI.getPointerTy(DAG.getDataLayout()));
23972397

23982398
SDLoc dl(Node);
23992399
TargetLowering::CallLoweringInfo CLI(DAG);
@@ -2461,10 +2461,9 @@ SDValue SelectionDAGLegalize::ExpandSincosStretLibCall(SDNode *Node) const {
24612461

24622462
Type *SincosStretRetTy = FuncTy->getReturnType();
24632463
CallingConv::ID CallConv = CallsInfo.getLibcallImplCallingConv(SincosStret);
2464-
StringRef LibcallImplName = CallsInfo.getLibcallImplName(SincosStret);
24652464

2466-
SDValue Callee = DAG.getExternalSymbol(LibcallImplName.data(),
2467-
TLI.getProgramPointerTy(DL));
2465+
SDValue Callee =
2466+
DAG.getExternalSymbol(SincosStret, TLI.getProgramPointerTy(DL));
24682467

24692468
TargetLowering::ArgListTy Args;
24702469
SDValue SRet;

llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5213,8 +5213,7 @@ void DAGTypeLegalizer::ExpandIntRes_XMULO(SDNode *N,
52135213
Entry.IsZExt = false;
52145214
Args.push_back(Entry);
52155215

5216-
SDValue Func =
5217-
DAG.getExternalSymbol(TLI.getLibcallImplName(LCImpl).data(), PtrVT);
5216+
SDValue Func = DAG.getExternalSymbol(LCImpl, PtrVT);
52185217

52195218
TargetLowering::CallLoweringInfo CLI(DAG);
52205219
CLI.setDebugLoc(dl)

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2066,6 +2066,11 @@ SDValue SelectionDAG::getExternalSymbol(const char *Sym, EVT VT) {
20662066
return SDValue(N, 0);
20672067
}
20682068

2069+
SDValue SelectionDAG::getExternalSymbol(RTLIB::LibcallImpl Libcall, EVT VT) {
2070+
StringRef SymName = TLI->getLibcallImplName(Libcall);
2071+
return getExternalSymbol(SymName.data(), VT);
2072+
}
2073+
20692074
SDValue SelectionDAG::getMCSymbol(MCSymbol *Sym, EVT VT) {
20702075
SDNode *&N = MCSymbols[Sym];
20712076
if (N)

llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ TargetLowering::makeLibCall(SelectionDAG &DAG, RTLIB::LibcallImpl LibcallImpl,
187187
Args.push_back(Entry);
188188
}
189189

190-
SDValue Callee = DAG.getExternalSymbol(getLibcallImplName(LibcallImpl).data(),
191-
getPointerTy(DAG.getDataLayout()));
190+
SDValue Callee =
191+
DAG.getExternalSymbol(LibcallImpl, getPointerTy(DAG.getDataLayout()));
192192

193193
Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
194194
Type *OrigRetTy = RetTy;
@@ -12261,8 +12261,8 @@ bool TargetLowering::expandMultipleResultFPLibCall(
1226112261
? Node->getValueType(*CallRetResNo).getTypeForEVT(Ctx)
1226212262
: Type::getVoidTy(Ctx);
1226312263
SDValue InChain = StoresInChain ? StoresInChain : DAG.getEntryNode();
12264-
SDValue Callee = DAG.getExternalSymbol(getLibcallImplName(LibcallImpl).data(),
12265-
getPointerTy(DAG.getDataLayout()));
12264+
SDValue Callee =
12265+
DAG.getExternalSymbol(LibcallImpl, getPointerTy(DAG.getDataLayout()));
1226612266
TargetLowering::CallLoweringInfo CLI(DAG);
1226712267
CLI.setDebugLoc(DL).setChain(InChain).setLibCallee(
1226812268
getLibcallImplCallingConv(LibcallImpl), RetType, Callee, std::move(Args));

0 commit comments

Comments
 (0)