[llvm] 779f724 - XCore: Declare libcalls used for align 4 memcpy (#144976)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 27 01:50:04 PDT 2025
Author: Matt Arsenault
Date: 2025-06-27T17:50:01+09:00
New Revision: 779f7243c8bb70ae0f63ea402bdc92a0cbf9b618
URL: https://github.com/llvm/llvm-project/commit/779f7243c8bb70ae0f63ea402bdc92a0cbf9b618
DIFF: https://github.com/llvm/llvm-project/commit/779f7243c8bb70ae0f63ea402bdc92a0cbf9b618.diff
LOG: XCore: Declare libcalls used for align 4 memcpy (#144976)
This usage was hidden in XCoreSelectionDAGInfo and bypassed
the usual libcall system, so define these for later use.
Added:
Modified:
llvm/include/llvm/IR/RuntimeLibcalls.td
llvm/lib/IR/RuntimeLibcalls.cpp
llvm/lib/Target/XCore/XCoreSelectionDAGInfo.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td
index 39ebab73652fa..c1855e5cdc566 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.td
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.td
@@ -371,6 +371,9 @@ def AEABI_MEMCLR8 : RuntimeLibcall;
// Hexagon calls
def HEXAGON_MEMCPY_LIKELY_ALIGNED_MIN32BYTES_MULT8BYTES : RuntimeLibcall;
+// XCore calls
+def MEMCPY_ALIGN_4 : RuntimeLibcall;
+
//--------------------------------------------------------------------
// Define implementation default libcalls
//--------------------------------------------------------------------
@@ -1544,6 +1547,12 @@ def _allrem : RuntimeLibcallImpl<SREM_I64>; // CallingConv::X86_StdCall
def _aullrem : RuntimeLibcallImpl<UREM_I64>; // CallingConv::X86_StdCall
def _allmul : RuntimeLibcallImpl<MUL_I64>; // CallingConv::X86_StdCall
+//===----------------------------------------------------------------------===//
+// XCore Runtime Libcalls
+//===----------------------------------------------------------------------===//
+
+def __memcpy_4 : RuntimeLibcallImpl<MEMCPY_ALIGN_4>;
+
//===----------------------------------------------------------------------===//
// ZOS Runtime Libcalls
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 9b109358fff95..79a49159efc73 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -595,6 +595,9 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
if (TT.isSystemZ() && TT.isOSzOS())
setZOSLibCallNameOverrides();
+
+ if (TT.getArch() == Triple::ArchType::xcore)
+ setLibcallImpl(RTLIB::MEMCPY_ALIGN_4, RTLIB::__memcpy_4);
}
bool RuntimeLibcallsInfo::darwinHasExp10(const Triple &TT) {
diff --git a/llvm/lib/Target/XCore/XCoreSelectionDAGInfo.cpp b/llvm/lib/Target/XCore/XCoreSelectionDAGInfo.cpp
index bc34ab4319690..1bd92a2b49475 100644
--- a/llvm/lib/Target/XCore/XCoreSelectionDAGInfo.cpp
+++ b/llvm/lib/Target/XCore/XCoreSelectionDAGInfo.cpp
@@ -39,14 +39,17 @@ SDValue XCoreSelectionDAGInfo::EmitTargetCodeForMemcpy(
Entry.Node = Src; Args.push_back(Entry);
Entry.Node = Size; Args.push_back(Entry);
+ const char *MemcpyAlign4Name = TLI.getLibcallName(RTLIB::MEMCPY_ALIGN_4);
+ CallingConv::ID CC = TLI.getLibcallCallingConv(RTLIB::MEMCPY_ALIGN_4);
+
TargetLowering::CallLoweringInfo CLI(DAG);
CLI.setDebugLoc(dl)
.setChain(Chain)
- .setLibCallee(TLI.getLibcallCallingConv(RTLIB::MEMCPY),
- Type::getVoidTy(*DAG.getContext()),
- DAG.getExternalSymbol(
- "__memcpy_4", TLI.getPointerTy(DAG.getDataLayout())),
- std::move(Args))
+ .setLibCallee(
+ CC, Type::getVoidTy(*DAG.getContext()),
+ DAG.getExternalSymbol(MemcpyAlign4Name,
+ TLI.getPointerTy(DAG.getDataLayout())),
+ std::move(Args))
.setDiscardResult();
std::pair<SDValue,SDValue> CallResult = TLI.LowerCallTo(CLI);
More information about the llvm-commits
mailing list