-
Notifications
You must be signed in to change notification settings - Fork 15.4k
DAG: Add overload of getExternalSymbol using RTLIB::LibcallImpl #170587
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: users/arsenm/dag/no-assert-ctpop-unavailable
Are you sure you want to change the base?
DAG: Add overload of getExternalSymbol using RTLIB::LibcallImpl #170587
Conversation
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
|
@llvm/pr-subscribers-llvm-selectiondag Author: Matt Arsenault (arsenm) ChangesFull diff: https://github.com/llvm/llvm-project/pull/170587.diff 5 Files Affected:
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 2d2d39dab864a..f49499e6e9f56 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.getUNDEF(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 87eb56dbed61b..87c39013ad6f0 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;
@@ -12248,8 +12248,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));
|
RKSimon
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM cheers
5a47ed2 to
cf50823
Compare
bf139da to
2ddaf38
Compare

No description provided.