[llvm] 4455d9d - RuntimeLibcalls: Use iterable enum for libcall types (#143075)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 6 04:58:23 PDT 2025
Author: Matt Arsenault
Date: 2025-06-06T20:58:18+09:00
New Revision: 4455d9d3e333ab780a642c534560f10b519a865c
URL: https://github.com/llvm/llvm-project/commit/4455d9d3e333ab780a642c534560f10b519a865c
DIFF: https://github.com/llvm/llvm-project/commit/4455d9d3e333ab780a642c534560f10b519a865c.diff
LOG: RuntimeLibcalls: Use iterable enum for libcall types (#143075)
Added:
Modified:
llvm/include/llvm/IR/RuntimeLibcalls.h
llvm/lib/IR/RuntimeLibcalls.cpp
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/lib/Target/Lanai/LanaiISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.h b/llvm/include/llvm/IR/RuntimeLibcalls.h
index 26c085031a48a..89e466ee5933d 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.h
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.h
@@ -15,6 +15,7 @@
#define LLVM_IR_RUNTIME_LIBCALLS_H
#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Sequence.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/Compiler.h"
@@ -36,6 +37,18 @@ enum Libcall {
#include "llvm/IR/RuntimeLibcalls.def"
#undef HANDLE_LIBCALL
};
+} // namespace RTLIB
+
+template <> struct enum_iteration_traits<RTLIB::Libcall> {
+ static constexpr bool is_iterable = true;
+};
+
+namespace RTLIB {
+
+// Return an iterator over all Libcall values.
+static inline auto libcalls() {
+ return enum_seq(static_cast<RTLIB::Libcall>(0), RTLIB::UNKNOWN_LIBCALL);
+}
/// A simple container for information about the supported runtime calls.
struct RuntimeLibcallsInfo {
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 430166adb9e19..6c093df974693 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -208,21 +208,14 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
setLibcallName(RTLIB::FREXP_PPCF128, nullptr);
}
- // Disable most libcalls on AMDGPU.
- if (TT.isAMDGPU()) {
- for (int I = 0; I < RTLIB::UNKNOWN_LIBCALL; ++I) {
- if (I < RTLIB::ATOMIC_LOAD || I > RTLIB::ATOMIC_FETCH_NAND_16)
- setLibcallName(static_cast<RTLIB::Libcall>(I), nullptr);
+ // Disable most libcalls on AMDGPU and NVPTX.
+ if (TT.isAMDGPU() || TT.isNVPTX()) {
+ for (RTLIB::Libcall LC : RTLIB::libcalls()) {
+ if (LC < RTLIB::ATOMIC_LOAD || LC > RTLIB::ATOMIC_FETCH_NAND_16)
+ setLibcallName(LC, nullptr);
}
}
- // Disable most libcalls on NVPTX.
- if (TT.isNVPTX()) {
- for (int I = 0; I < RTLIB::UNKNOWN_LIBCALL; ++I)
- if (I < RTLIB::ATOMIC_LOAD || I > RTLIB::ATOMIC_FETCH_NAND_16)
- setLibcallName(static_cast<RTLIB::Libcall>(I), nullptr);
- }
-
if (TT.isOSMSVCRT()) {
// MSVCRT doesn't have powi; fall back to pow
setLibcallName(RTLIB::POWI_F32, nullptr);
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index d156851d7e214..574281d12e3cb 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -511,10 +511,11 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
if (!Subtarget->isTargetDarwin() && !Subtarget->isTargetIOS() &&
!Subtarget->isTargetWatchOS() && !Subtarget->isTargetDriverKit()) {
bool IsHFTarget = TM.Options.FloatABIType == FloatABI::Hard;
- for (int LCID = 0; LCID < RTLIB::UNKNOWN_LIBCALL; ++LCID)
- setLibcallCallingConv(static_cast<RTLIB::Libcall>(LCID),
- IsHFTarget ? CallingConv::ARM_AAPCS_VFP
- : CallingConv::ARM_AAPCS);
+
+ for (RTLIB::Libcall LC : RTLIB::libcalls()) {
+ setLibcallCallingConv(LC, IsHFTarget ? CallingConv::ARM_AAPCS_VFP
+ : CallingConv::ARM_AAPCS);
+ }
}
if (Subtarget->isTargetMachO()) {
diff --git a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp
index 8b50eb2678af6..7781817aef71a 100644
--- a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp
+++ b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp
@@ -151,9 +151,8 @@ LanaiTargetLowering::LanaiTargetLowering(const TargetMachine &TM,
setMinimumJumpTableEntries(100);
// Use fast calling convention for library functions.
- for (int I = 0; I < RTLIB::UNKNOWN_LIBCALL; ++I) {
- setLibcallCallingConv(static_cast<RTLIB::Libcall>(I), CallingConv::Fast);
- }
+ for (RTLIB::Libcall LC : RTLIB::libcalls())
+ setLibcallCallingConv(LC, CallingConv::Fast);
MaxStoresPerMemset = 16; // For @llvm.memset -> sequence of stores
MaxStoresPerMemsetOptSize = 8;
More information about the llvm-commits
mailing list