https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/148571
Switch the default set to exclude these conditionally available calls, so they are opt-in instead of opt-out. >From 650ac1eabb74647ae7ce6a653f6159d269818511 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <matthew.arsena...@amd.com> Date: Mon, 14 Jul 2025 14:53:08 +0900 Subject: [PATCH] RuntimeLibcalls: Invert handling of 64-bit only libcalls Switch the default set to exclude these conditionally available calls, so they are opt-in instead of opt-out. --- llvm/include/llvm/IR/RuntimeLibcalls.td | 10 +++++----- llvm/lib/IR/RuntimeLibcalls.cpp | 20 +++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td index 53eea97bf1ea9..b0651a8ac9920 100644 --- a/llvm/include/llvm/IR/RuntimeLibcalls.td +++ b/llvm/include/llvm/IR/RuntimeLibcalls.td @@ -439,26 +439,21 @@ let IsDefault = true in { def __ashlhi3 : RuntimeLibcallImpl<SHL_I16>; def __ashlsi3 : RuntimeLibcallImpl<SHL_I32>; def __ashldi3 : RuntimeLibcallImpl<SHL_I64>; -def __ashlti3 : RuntimeLibcallImpl<SHL_I128>; def __lshrhi3 : RuntimeLibcallImpl<SRL_I16>; def __lshrsi3 : RuntimeLibcallImpl<SRL_I32>; def __lshrdi3 : RuntimeLibcallImpl<SRL_I64>; -def __lshrti3 : RuntimeLibcallImpl<SRL_I128>; def __ashrhi3 : RuntimeLibcallImpl<SRA_I16>; def __ashrsi3 : RuntimeLibcallImpl<SRA_I32>; def __ashrdi3 : RuntimeLibcallImpl<SRA_I64>; -def __ashrti3 : RuntimeLibcallImpl<SRA_I128>; def __mulqi3 : RuntimeLibcallImpl<MUL_I8>; def __mulhi3 : RuntimeLibcallImpl<MUL_I16>; def __mulsi3 : RuntimeLibcallImpl<MUL_I32>; def __muldi3 : RuntimeLibcallImpl<MUL_I64>; -def __multi3 : RuntimeLibcallImpl<MUL_I128>; def __mulosi4 : RuntimeLibcallImpl<MULO_I32>; -def __mulodi4 : RuntimeLibcallImpl<MULO_I64>; def __divqi3 : RuntimeLibcallImpl<SDIV_I8>; def __divhi3 : RuntimeLibcallImpl<SDIV_I16>; @@ -938,6 +933,11 @@ def calloc : RuntimeLibcallImpl<CALLOC>; // compiler-rt, not available for most architectures //-------------------------------------------------------------------- +def __ashlti3 : RuntimeLibcallImpl<SHL_I128>; +def __lshrti3 : RuntimeLibcallImpl<SRL_I128>; +def __ashrti3 : RuntimeLibcallImpl<SRA_I128>; +def __multi3 : RuntimeLibcallImpl<MUL_I128>; +def __mulodi4 : RuntimeLibcallImpl<MULO_I64>; def __muloti4 : RuntimeLibcallImpl<MULO_I128>; //-------------------------------------------------------------------- diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp index 3dd894ad6c50e..004d2758cb963 100644 --- a/llvm/lib/IR/RuntimeLibcalls.cpp +++ b/llvm/lib/IR/RuntimeLibcalls.cpp @@ -139,6 +139,10 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT, EABI EABIVersion, StringRef ABIName) { setTargetRuntimeLibcallSets(TT, FloatABI); + // Early exit for targets that have fully ported to tablegen. + if (TT.isAMDGPU() || TT.isNVPTX()) + return; + // Use the f128 variants of math functions on x86 if (TT.isX86() && TT.isGNUEnvironment()) setLongDoubleIsF128Libm(*this, /*FiniteOnlyFuncs=*/true); @@ -241,15 +245,13 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT, if (TT.isARM() || TT.isThumb()) setARMLibcallNames(*this, TT, FloatABI, EABIVersion); - if (!TT.isWasm()) { - // These libcalls are only available in compiler-rt, not libgcc. - if (TT.isArch32Bit()) { - setLibcallImpl(RTLIB::SHL_I128, RTLIB::Unsupported); - setLibcallImpl(RTLIB::SRL_I128, RTLIB::Unsupported); - setLibcallImpl(RTLIB::SRA_I128, RTLIB::Unsupported); - setLibcallImpl(RTLIB::MUL_I128, RTLIB::Unsupported); - setLibcallImpl(RTLIB::MULO_I64, RTLIB::Unsupported); - } + // These libcalls are only available in compiler-rt, not libgcc. + if (TT.isArch64Bit()) { + setLibcallImpl(RTLIB::SHL_I128, RTLIB::__ashlti3); + setLibcallImpl(RTLIB::SRL_I128, RTLIB::__lshrti3); + setLibcallImpl(RTLIB::SRA_I128, RTLIB::__ashrti3); + setLibcallImpl(RTLIB::MUL_I128, RTLIB::__multi3); + setLibcallImpl(RTLIB::MULO_I64, RTLIB::__mulodi4); } if (TT.getArch() == Triple::ArchType::msp430) { _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits