Skip to content

Commit 4455d9d

Browse files
authored
RuntimeLibcalls: Use iterable enum for libcall types (#143075)
1 parent dde30a4 commit 4455d9d

File tree

4 files changed

+25
-19
lines changed

4 files changed

+25
-19
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#define LLVM_IR_RUNTIME_LIBCALLS_H
1616

1717
#include "llvm/ADT/ArrayRef.h"
18+
#include "llvm/ADT/Sequence.h"
1819
#include "llvm/IR/CallingConv.h"
1920
#include "llvm/Support/AtomicOrdering.h"
2021
#include "llvm/Support/Compiler.h"
@@ -36,6 +37,18 @@ enum Libcall {
3637
#include "llvm/IR/RuntimeLibcalls.def"
3738
#undef HANDLE_LIBCALL
3839
};
40+
} // namespace RTLIB
41+
42+
template <> struct enum_iteration_traits<RTLIB::Libcall> {
43+
static constexpr bool is_iterable = true;
44+
};
45+
46+
namespace RTLIB {
47+
48+
// Return an iterator over all Libcall values.
49+
static inline auto libcalls() {
50+
return enum_seq(static_cast<RTLIB::Libcall>(0), RTLIB::UNKNOWN_LIBCALL);
51+
}
3952

4053
/// A simple container for information about the supported runtime calls.
4154
struct RuntimeLibcallsInfo {

llvm/lib/IR/RuntimeLibcalls.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -208,21 +208,14 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
208208
setLibcallName(RTLIB::FREXP_PPCF128, nullptr);
209209
}
210210

211-
// Disable most libcalls on AMDGPU.
212-
if (TT.isAMDGPU()) {
213-
for (int I = 0; I < RTLIB::UNKNOWN_LIBCALL; ++I) {
214-
if (I < RTLIB::ATOMIC_LOAD || I > RTLIB::ATOMIC_FETCH_NAND_16)
215-
setLibcallName(static_cast<RTLIB::Libcall>(I), nullptr);
211+
// Disable most libcalls on AMDGPU and NVPTX.
212+
if (TT.isAMDGPU() || TT.isNVPTX()) {
213+
for (RTLIB::Libcall LC : RTLIB::libcalls()) {
214+
if (LC < RTLIB::ATOMIC_LOAD || LC > RTLIB::ATOMIC_FETCH_NAND_16)
215+
setLibcallName(LC, nullptr);
216216
}
217217
}
218218

219-
// Disable most libcalls on NVPTX.
220-
if (TT.isNVPTX()) {
221-
for (int I = 0; I < RTLIB::UNKNOWN_LIBCALL; ++I)
222-
if (I < RTLIB::ATOMIC_LOAD || I > RTLIB::ATOMIC_FETCH_NAND_16)
223-
setLibcallName(static_cast<RTLIB::Libcall>(I), nullptr);
224-
}
225-
226219
if (TT.isOSMSVCRT()) {
227220
// MSVCRT doesn't have powi; fall back to pow
228221
setLibcallName(RTLIB::POWI_F32, nullptr);

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -511,10 +511,11 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
511511
if (!Subtarget->isTargetDarwin() && !Subtarget->isTargetIOS() &&
512512
!Subtarget->isTargetWatchOS() && !Subtarget->isTargetDriverKit()) {
513513
bool IsHFTarget = TM.Options.FloatABIType == FloatABI::Hard;
514-
for (int LCID = 0; LCID < RTLIB::UNKNOWN_LIBCALL; ++LCID)
515-
setLibcallCallingConv(static_cast<RTLIB::Libcall>(LCID),
516-
IsHFTarget ? CallingConv::ARM_AAPCS_VFP
517-
: CallingConv::ARM_AAPCS);
514+
515+
for (RTLIB::Libcall LC : RTLIB::libcalls()) {
516+
setLibcallCallingConv(LC, IsHFTarget ? CallingConv::ARM_AAPCS_VFP
517+
: CallingConv::ARM_AAPCS);
518+
}
518519
}
519520

520521
if (Subtarget->isTargetMachO()) {

llvm/lib/Target/Lanai/LanaiISelLowering.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,8 @@ LanaiTargetLowering::LanaiTargetLowering(const TargetMachine &TM,
151151
setMinimumJumpTableEntries(100);
152152

153153
// Use fast calling convention for library functions.
154-
for (int I = 0; I < RTLIB::UNKNOWN_LIBCALL; ++I) {
155-
setLibcallCallingConv(static_cast<RTLIB::Libcall>(I), CallingConv::Fast);
156-
}
154+
for (RTLIB::Libcall LC : RTLIB::libcalls())
155+
setLibcallCallingConv(LC, CallingConv::Fast);
157156

158157
MaxStoresPerMemset = 16; // For @llvm.memset -> sequence of stores
159158
MaxStoresPerMemsetOptSize = 8;

0 commit comments

Comments
 (0)