[clang] ea443ee - [Clang][NFC] Move OffloadArch enum to a generic location (#137070)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 25 09:37:59 PDT 2025
Author: Justin Cai
Date: 2025-04-25T11:37:56-05:00
New Revision: ea443eeb2ab8ed49ffb783c2025fed6629a36f10
URL: https://github.com/llvm/llvm-project/commit/ea443eeb2ab8ed49ffb783c2025fed6629a36f10
DIFF: https://github.com/llvm/llvm-project/commit/ea443eeb2ab8ed49ffb783c2025fed6629a36f10.diff
LOG: [Clang][NFC] Move OffloadArch enum to a generic location (#137070)
Currently, the OffloadArch enum is defined Cuda.h. This PR moves the
definition to a more generic location in OffloadArch.h/cpp.
Added:
clang/include/clang/Basic/OffloadArch.h
clang/lib/Basic/OffloadArch.cpp
Modified:
clang/include/clang/Basic/Cuda.h
clang/lib/Basic/CMakeLists.txt
clang/lib/Basic/Cuda.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Basic/Cuda.h b/clang/include/clang/Basic/Cuda.h
index c4eb7b7cac1d6..d6a22a7af559b 100644
--- a/clang/include/clang/Basic/Cuda.h
+++ b/clang/include/clang/Basic/Cuda.h
@@ -9,6 +9,8 @@
#ifndef LLVM_CLANG_BASIC_CUDA_H
#define LLVM_CLANG_BASIC_CUDA_H
+#include "clang/Basic/OffloadArch.h"
+
namespace llvm {
class StringRef;
class Twine;
@@ -54,98 +56,6 @@ const char *CudaVersionToString(CudaVersion V);
// Input is "Major.Minor"
CudaVersion CudaStringToVersion(const llvm::Twine &S);
-enum class OffloadArch {
- UNUSED,
- UNKNOWN,
- // TODO: Deprecate and remove GPU architectures older than sm_52.
- SM_20,
- SM_21,
- SM_30,
- // This has a name conflict with sys/mac.h on AIX, rename it as a workaround.
- SM_32_,
- SM_35,
- SM_37,
- SM_50,
- SM_52,
- SM_53,
- SM_60,
- SM_61,
- SM_62,
- SM_70,
- SM_72,
- SM_75,
- SM_80,
- SM_86,
- SM_87,
- SM_89,
- SM_90,
- SM_90a,
- SM_100,
- SM_100a,
- SM_101,
- SM_101a,
- SM_120,
- SM_120a,
- GFX600,
- GFX601,
- GFX602,
- GFX700,
- GFX701,
- GFX702,
- GFX703,
- GFX704,
- GFX705,
- GFX801,
- GFX802,
- GFX803,
- GFX805,
- GFX810,
- GFX9_GENERIC,
- GFX900,
- GFX902,
- GFX904,
- GFX906,
- GFX908,
- GFX909,
- GFX90a,
- GFX90c,
- GFX9_4_GENERIC,
- GFX942,
- GFX950,
- GFX10_1_GENERIC,
- GFX1010,
- GFX1011,
- GFX1012,
- GFX1013,
- GFX10_3_GENERIC,
- GFX1030,
- GFX1031,
- GFX1032,
- GFX1033,
- GFX1034,
- GFX1035,
- GFX1036,
- GFX11_GENERIC,
- GFX1100,
- GFX1101,
- GFX1102,
- GFX1103,
- GFX1150,
- GFX1151,
- GFX1152,
- GFX1153,
- GFX12_GENERIC,
- GFX1200,
- GFX1201,
- AMDGCNSPIRV,
- Generic, // A processor model named 'generic' if the target backend defines a
- // public one.
- LAST,
-
- CudaDefault = OffloadArch::SM_52,
- HIPDefault = OffloadArch::GFX906,
-};
-
enum class CUDAFunctionTarget {
Device,
Global,
@@ -154,21 +64,6 @@ enum class CUDAFunctionTarget {
InvalidTarget
};
-static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
- return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
-}
-
-static inline bool IsAMDOffloadArch(OffloadArch A) {
- // Generic processor model is for testing only.
- return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
-}
-
-const char *OffloadArchToString(OffloadArch A);
-const char *OffloadArchToVirtualArchString(OffloadArch A);
-
-// The input should have the form "sm_20".
-OffloadArch StringToOffloadArch(llvm::StringRef S);
-
/// Get the earliest CudaVersion that supports the given OffloadArch.
CudaVersion MinVersionForOffloadArch(OffloadArch A);
diff --git a/clang/include/clang/Basic/OffloadArch.h b/clang/include/clang/Basic/OffloadArch.h
new file mode 100644
index 0000000000000..c5ccd17e7a8be
--- /dev/null
+++ b/clang/include/clang/Basic/OffloadArch.h
@@ -0,0 +1,128 @@
+//===--- OffloadArch.h - Definition of offloading architectures --- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_OFFLOADARCH_H
+#define LLVM_CLANG_BASIC_OFFLOADARCH_H
+
+namespace llvm {
+class StringRef;
+} // namespace llvm
+
+namespace clang {
+
+enum class OffloadArch {
+ UNUSED,
+ UNKNOWN,
+ // TODO: Deprecate and remove GPU architectures older than sm_52.
+ SM_20,
+ SM_21,
+ SM_30,
+ // This has a name conflict with sys/mac.h on AIX, rename it as a workaround.
+ SM_32_,
+ SM_35,
+ SM_37,
+ SM_50,
+ SM_52,
+ SM_53,
+ SM_60,
+ SM_61,
+ SM_62,
+ SM_70,
+ SM_72,
+ SM_75,
+ SM_80,
+ SM_86,
+ SM_87,
+ SM_89,
+ SM_90,
+ SM_90a,
+ SM_100,
+ SM_100a,
+ SM_101,
+ SM_101a,
+ SM_120,
+ SM_120a,
+ GFX600,
+ GFX601,
+ GFX602,
+ GFX700,
+ GFX701,
+ GFX702,
+ GFX703,
+ GFX704,
+ GFX705,
+ GFX801,
+ GFX802,
+ GFX803,
+ GFX805,
+ GFX810,
+ GFX9_GENERIC,
+ GFX900,
+ GFX902,
+ GFX904,
+ GFX906,
+ GFX908,
+ GFX909,
+ GFX90a,
+ GFX90c,
+ GFX9_4_GENERIC,
+ GFX942,
+ GFX950,
+ GFX10_1_GENERIC,
+ GFX1010,
+ GFX1011,
+ GFX1012,
+ GFX1013,
+ GFX10_3_GENERIC,
+ GFX1030,
+ GFX1031,
+ GFX1032,
+ GFX1033,
+ GFX1034,
+ GFX1035,
+ GFX1036,
+ GFX11_GENERIC,
+ GFX1100,
+ GFX1101,
+ GFX1102,
+ GFX1103,
+ GFX1150,
+ GFX1151,
+ GFX1152,
+ GFX1153,
+ GFX12_GENERIC,
+ GFX1200,
+ GFX1201,
+ AMDGCNSPIRV,
+ Generic, // A processor model named 'generic' if the target backend defines a
+ // public one.
+ LAST,
+
+ CudaDefault = OffloadArch::SM_52,
+ HIPDefault = OffloadArch::GFX906,
+};
+
+static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
+ return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
+}
+
+static inline bool IsAMDOffloadArch(OffloadArch A) {
+ // Generic processor model is for testing only.
+ return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
+}
+
+const char *OffloadArchToString(OffloadArch A);
+const char *OffloadArchToVirtualArchString(OffloadArch A);
+
+// Convert a string to an OffloadArch enum value. Returns
+// OffloadArch::UNKNOWN if the string is not recognized.
+OffloadArch StringToOffloadArch(llvm::StringRef S);
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_OFFLOADARCH_H
diff --git a/clang/lib/Basic/CMakeLists.txt b/clang/lib/Basic/CMakeLists.txt
index 331dfbb3f4b67..419fd9bc136cf 100644
--- a/clang/lib/Basic/CMakeLists.txt
+++ b/clang/lib/Basic/CMakeLists.txt
@@ -76,6 +76,7 @@ add_clang_library(clangBasic
MakeSupport.cpp
Module.cpp
ObjCRuntime.cpp
+ OffloadArch.cpp
OpenCLOptions.cpp
OpenMPKinds.cpp
OperatorPrecedence.cpp
diff --git a/clang/lib/Basic/Cuda.cpp b/clang/lib/Basic/Cuda.cpp
index 68d042eca2492..8ea242911a2ba 100644
--- a/clang/lib/Basic/Cuda.cpp
+++ b/clang/lib/Basic/Cuda.cpp
@@ -73,123 +73,6 @@ CudaVersion ToCudaVersion(llvm::VersionTuple Version) {
return CudaVersion::UNKNOWN;
}
-namespace {
-struct OffloadArchToStringMap {
- OffloadArch arch;
- const char *arch_name;
- const char *virtual_arch_name;
-};
-} // namespace
-
-#define SM2(sm, ca) {OffloadArch::SM_##sm, "sm_" #sm, ca}
-#define SM(sm) SM2(sm, "compute_" #sm)
-#define GFX(gpu) {OffloadArch::GFX##gpu, "gfx" #gpu, "compute_amdgcn"}
-static const OffloadArchToStringMap arch_names[] = {
- // clang-format off
- {OffloadArch::UNUSED, "", ""},
- SM2(20, "compute_20"), SM2(21, "compute_20"), // Fermi
- SM(30), {OffloadArch::SM_32_, "sm_32", "compute_32"}, SM(35), SM(37), // Kepler
- SM(50), SM(52), SM(53), // Maxwell
- SM(60), SM(61), SM(62), // Pascal
- SM(70), SM(72), // Volta
- SM(75), // Turing
- SM(80), SM(86), // Ampere
- SM(87), // Jetson/Drive AGX Orin
- SM(89), // Ada Lovelace
- SM(90), // Hopper
- SM(90a), // Hopper
- SM(100), // Blackwell
- SM(100a), // Blackwell
- SM(101), // Blackwell
- SM(101a), // Blackwell
- SM(120), // Blackwell
- SM(120a), // Blackwell
- GFX(600), // gfx600
- GFX(601), // gfx601
- GFX(602), // gfx602
- GFX(700), // gfx700
- GFX(701), // gfx701
- GFX(702), // gfx702
- GFX(703), // gfx703
- GFX(704), // gfx704
- GFX(705), // gfx705
- GFX(801), // gfx801
- GFX(802), // gfx802
- GFX(803), // gfx803
- GFX(805), // gfx805
- GFX(810), // gfx810
- {OffloadArch::GFX9_GENERIC, "gfx9-generic", "compute_amdgcn"},
- GFX(900), // gfx900
- GFX(902), // gfx902
- GFX(904), // gfx903
- GFX(906), // gfx906
- GFX(908), // gfx908
- GFX(909), // gfx909
- GFX(90a), // gfx90a
- GFX(90c), // gfx90c
- {OffloadArch::GFX9_4_GENERIC, "gfx9-4-generic", "compute_amdgcn"},
- GFX(942), // gfx942
- GFX(950), // gfx950
- {OffloadArch::GFX10_1_GENERIC, "gfx10-1-generic", "compute_amdgcn"},
- GFX(1010), // gfx1010
- GFX(1011), // gfx1011
- GFX(1012), // gfx1012
- GFX(1013), // gfx1013
- {OffloadArch::GFX10_3_GENERIC, "gfx10-3-generic", "compute_amdgcn"},
- GFX(1030), // gfx1030
- GFX(1031), // gfx1031
- GFX(1032), // gfx1032
- GFX(1033), // gfx1033
- GFX(1034), // gfx1034
- GFX(1035), // gfx1035
- GFX(1036), // gfx1036
- {OffloadArch::GFX11_GENERIC, "gfx11-generic", "compute_amdgcn"},
- GFX(1100), // gfx1100
- GFX(1101), // gfx1101
- GFX(1102), // gfx1102
- GFX(1103), // gfx1103
- GFX(1150), // gfx1150
- GFX(1151), // gfx1151
- GFX(1152), // gfx1152
- GFX(1153), // gfx1153
- {OffloadArch::GFX12_GENERIC, "gfx12-generic", "compute_amdgcn"},
- GFX(1200), // gfx1200
- GFX(1201), // gfx1201
- {OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
- {OffloadArch::Generic, "generic", ""},
- // clang-format on
-};
-#undef SM
-#undef SM2
-#undef GFX
-
-const char *OffloadArchToString(OffloadArch A) {
- auto result = std::find_if(
- std::begin(arch_names), std::end(arch_names),
- [A](const OffloadArchToStringMap &map) { return A == map.arch; });
- if (result == std::end(arch_names))
- return "unknown";
- return result->arch_name;
-}
-
-const char *OffloadArchToVirtualArchString(OffloadArch A) {
- auto result = std::find_if(
- std::begin(arch_names), std::end(arch_names),
- [A](const OffloadArchToStringMap &map) { return A == map.arch; });
- if (result == std::end(arch_names))
- return "unknown";
- return result->virtual_arch_name;
-}
-
-OffloadArch StringToOffloadArch(llvm::StringRef S) {
- auto result = std::find_if(
- std::begin(arch_names), std::end(arch_names),
- [S](const OffloadArchToStringMap &map) { return S == map.arch_name; });
- if (result == std::end(arch_names))
- return OffloadArch::UNKNOWN;
- return result->arch;
-}
-
CudaVersion MinVersionForOffloadArch(OffloadArch A) {
if (A == OffloadArch::UNKNOWN)
return CudaVersion::UNKNOWN;
diff --git a/clang/lib/Basic/OffloadArch.cpp b/clang/lib/Basic/OffloadArch.cpp
new file mode 100644
index 0000000000000..5e29742478b99
--- /dev/null
+++ b/clang/lib/Basic/OffloadArch.cpp
@@ -0,0 +1,126 @@
+#include "clang/Basic/OffloadArch.h"
+
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringRef.h"
+
+namespace clang {
+
+namespace {
+struct OffloadArchToStringMap {
+ OffloadArch Arch;
+ const char *ArchName;
+ const char *VirtualArchName;
+};
+} // namespace
+
+#define SM(sm) {OffloadArch::SM_##sm, "sm_" #sm, "compute_" #sm}
+#define GFX(gpu) {OffloadArch::GFX##gpu, "gfx" #gpu, "compute_amdgcn"}
+static const OffloadArchToStringMap ArchNames[] = {
+ // clang-format off
+ {OffloadArch::UNUSED, "", ""},
+ SM(20), {OffloadArch::SM_21, "sm_21", "compute_20"}, // Fermi
+ SM(30), {OffloadArch::SM_32_, "sm_32", "compute_32"}, SM(35), SM(37), // Kepler
+ SM(50), SM(52), SM(53), // Maxwell
+ SM(60), SM(61), SM(62), // Pascal
+ SM(70), SM(72), // Volta
+ SM(75), // Turing
+ SM(80), SM(86), // Ampere
+ SM(87), // Jetson/Drive AGX Orin
+ SM(89), // Ada Lovelace
+ SM(90), // Hopper
+ SM(90a), // Hopper
+ SM(100), // Blackwell
+ SM(100a), // Blackwell
+ SM(101), // Blackwell
+ SM(101a), // Blackwell
+ SM(120), // Blackwell
+ SM(120a), // Blackwell
+ GFX(600), // gfx600
+ GFX(601), // gfx601
+ GFX(602), // gfx602
+ GFX(700), // gfx700
+ GFX(701), // gfx701
+ GFX(702), // gfx702
+ GFX(703), // gfx703
+ GFX(704), // gfx704
+ GFX(705), // gfx705
+ GFX(801), // gfx801
+ GFX(802), // gfx802
+ GFX(803), // gfx803
+ GFX(805), // gfx805
+ GFX(810), // gfx810
+ {OffloadArch::GFX9_GENERIC, "gfx9-generic", "compute_amdgcn"},
+ GFX(900), // gfx900
+ GFX(902), // gfx902
+ GFX(904), // gfx903
+ GFX(906), // gfx906
+ GFX(908), // gfx908
+ GFX(909), // gfx909
+ GFX(90a), // gfx90a
+ GFX(90c), // gfx90c
+ {OffloadArch::GFX9_4_GENERIC, "gfx9-4-generic", "compute_amdgcn"},
+ GFX(942), // gfx942
+ GFX(950), // gfx950
+ {OffloadArch::GFX10_1_GENERIC, "gfx10-1-generic", "compute_amdgcn"},
+ GFX(1010), // gfx1010
+ GFX(1011), // gfx1011
+ GFX(1012), // gfx1012
+ GFX(1013), // gfx1013
+ {OffloadArch::GFX10_3_GENERIC, "gfx10-3-generic", "compute_amdgcn"},
+ GFX(1030), // gfx1030
+ GFX(1031), // gfx1031
+ GFX(1032), // gfx1032
+ GFX(1033), // gfx1033
+ GFX(1034), // gfx1034
+ GFX(1035), // gfx1035
+ GFX(1036), // gfx1036
+ {OffloadArch::GFX11_GENERIC, "gfx11-generic", "compute_amdgcn"},
+ GFX(1100), // gfx1100
+ GFX(1101), // gfx1101
+ GFX(1102), // gfx1102
+ GFX(1103), // gfx1103
+ GFX(1150), // gfx1150
+ GFX(1151), // gfx1151
+ GFX(1152), // gfx1152
+ GFX(1153), // gfx1153
+ {OffloadArch::GFX12_GENERIC, "gfx12-generic", "compute_amdgcn"},
+ GFX(1200), // gfx1200
+ GFX(1201), // gfx1201
+ {OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
+ {OffloadArch::Generic, "generic", ""},
+ // clang-format on
+};
+#undef SM
+#undef GFX
+
+const char *OffloadArchToString(OffloadArch A) {
+ auto Result =
+ llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {
+ return A == Map.Arch;
+ });
+ if (Result == std::end(ArchNames))
+ return "unknown";
+ return Result->ArchName;
+}
+
+const char *OffloadArchToVirtualArchString(OffloadArch A) {
+ auto Result =
+ llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {
+ return A == Map.Arch;
+ });
+ if (Result == std::end(ArchNames))
+ return "unknown";
+ return Result->VirtualArchName;
+}
+
+OffloadArch StringToOffloadArch(llvm::StringRef S) {
+ auto Result =
+ llvm::find_if(ArchNames, [S](const OffloadArchToStringMap &Map) {
+ return S == Map.ArchName;
+ });
+ if (Result == std::end(ArchNames))
+ return OffloadArch::UNKNOWN;
+ return Result->Arch;
+}
+
+} // namespace clang
More information about the cfe-commits
mailing list