[llvm-branch-commits] [llvm] RuntimeLibcalls: Invert handling of 64-bit only libcalls (PR #148571)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Jul 13 23:40:35 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-ir
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
Switch the default set to exclude these conditionally available
calls, so they are opt-in instead of opt-out.
---
Full diff: https://github.com/llvm/llvm-project/pull/148571.diff
2 Files Affected:
- (modified) llvm/include/llvm/IR/RuntimeLibcalls.td (+5-5)
- (modified) llvm/lib/IR/RuntimeLibcalls.cpp (+11-9)
``````````diff
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) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/148571
More information about the llvm-branch-commits
mailing list