[llvm] 2771d35 - [NFC ]Add a helper function isTailCall for getting libcall in SelectionDAG (#155256)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 16 07:17:33 PDT 2025
Author: zhijian lin
Date: 2025-09-16T10:17:29-04:00
New Revision: 2771d35e2aaf76cf3716954d6094a822e56dfda5
URL: https://github.com/llvm/llvm-project/commit/2771d35e2aaf76cf3716954d6094a822e56dfda5
DIFF: https://github.com/llvm/llvm-project/commit/2771d35e2aaf76cf3716954d6094a822e56dfda5.diff
LOG: [NFC ]Add a helper function isTailCall for getting libcall in SelectionDAG (#155256)
Based on comment of
https://github.com/llvm/llvm-project/pull/153600#discussion_r2285729269,
Add a helper function isTailCall for getting libcall in SelectionDAG.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index bcf25958d0982..029eb025ff1de 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -9053,6 +9053,18 @@ static void checkAddrSpaceIsValidForLibcall(const TargetLowering *TLI,
}
}
+static bool isInTailCallPositionWrapper(const CallInst *CI,
+ const SelectionDAG *SelDAG,
+ bool AllowReturnsFirstArg) {
+ if (!CI || !CI->isTailCall())
+ return false;
+ // TODO: Fix "returns-first-arg" determination so it doesn't depend on which
+ // helper symbol we lower to.
+ return isInTailCallPosition(*CI, SelDAG->getTarget(),
+ AllowReturnsFirstArg &&
+ funcReturnsFirstArgOfCall(*CI));
+}
+
std::pair<SDValue, SDValue>
SelectionDAG::getMemcmp(SDValue Chain, const SDLoc &dl, SDValue Mem0,
SDValue Mem1, SDValue Size, const CallInst *CI) {
@@ -9067,10 +9079,8 @@ SelectionDAG::getMemcmp(SDValue Chain, const SDLoc &dl, SDValue Mem0,
{Size, getDataLayout().getIntPtrType(*getContext())}};
TargetLowering::CallLoweringInfo CLI(*this);
- bool IsTailCall = false;
- bool ReturnsFirstArg = CI && funcReturnsFirstArgOfCall(*CI);
- IsTailCall = CI && CI->isTailCall() &&
- isInTailCallPosition(*CI, getTarget(), ReturnsFirstArg);
+ bool IsTailCall =
+ isInTailCallPositionWrapper(CI, this, /*AllowReturnsFirstArg*/ true);
CLI.setDebugLoc(dl)
.setChain(Chain)
@@ -9148,10 +9158,7 @@ SDValue SelectionDAG::getMemcpy(
IsTailCall = *OverrideTailCall;
} else {
bool LowersToMemcpy = StringRef(MemCpyName) == StringRef("memcpy");
- bool ReturnsFirstArg = CI && funcReturnsFirstArgOfCall(*CI);
- IsTailCall = CI && CI->isTailCall() &&
- isInTailCallPosition(*CI, getTarget(),
- ReturnsFirstArg && LowersToMemcpy);
+ IsTailCall = isInTailCallPositionWrapper(CI, this, LowersToMemcpy);
}
CLI.setDebugLoc(dl)
@@ -9255,10 +9262,7 @@ SDValue SelectionDAG::getMemmove(SDValue Chain, const SDLoc &dl, SDValue Dst,
} else {
bool LowersToMemmove =
TLI->getLibcallName(RTLIB::MEMMOVE) == StringRef("memmove");
- bool ReturnsFirstArg = CI && funcReturnsFirstArgOfCall(*CI);
- IsTailCall = CI && CI->isTailCall() &&
- isInTailCallPosition(*CI, getTarget(),
- ReturnsFirstArg && LowersToMemmove);
+ IsTailCall = isInTailCallPositionWrapper(CI, this, LowersToMemmove);
}
CLI.setDebugLoc(dl)
More information about the llvm-commits
mailing list