https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/144976
>From e6005bd5d36b8091e31b389233e745ee99d61949 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <matthew.arsena...@amd.com> Date: Mon, 16 Jun 2025 16:27:41 +0900 Subject: [PATCH] XCore: Declare libcalls used for align 4 memcpy This usage was hidden in XCoreSelectionDAGInfo and bypassed the usual libcall system, so define these for later use. --- llvm/include/llvm/IR/RuntimeLibcalls.td | 9 +++++++++ llvm/lib/IR/RuntimeLibcalls.cpp | 3 +++ llvm/lib/Target/XCore/XCoreSelectionDAGInfo.cpp | 13 ++++++++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td index 2efe823a760db..57ad6f09e8b57 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 178288d9f7b54..52cebc9d9865e 100644 --- a/llvm/lib/IR/RuntimeLibcalls.cpp +++ b/llvm/lib/IR/RuntimeLibcalls.cpp @@ -627,4 +627,7 @@ 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); } 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); _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits