[clang] [Clang] Move OffloadArch enum to a generic location and add initial set of Intel OffloadArch values (PR #137070)
Justin Cai via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 24 09:01:03 PDT 2025
https://github.com/jzc updated https://github.com/llvm/llvm-project/pull/137070
>From 924f54246910cad42f97efe1bc3d3bdfec039ecb Mon Sep 17 00:00:00 2001
From: "Cai, Justin" <justin.cai at intel.com>
Date: Mon, 14 Apr 2025 21:30:39 +0000
Subject: [PATCH 1/2] [Clang] Move OffloadArch enum to a generic location and
add initial set of Intel OffloadArch values
---
clang/include/clang/Basic/Cuda.h | 109 +----------------
clang/include/clang/Basic/OffloadArch.h | 143 ++++++++++++++++++++++
clang/lib/Basic/CMakeLists.txt | 1 +
clang/lib/Basic/Cuda.cpp | 117 ------------------
clang/lib/Basic/OffloadArch.cpp | 133 ++++++++++++++++++++
clang/lib/Basic/Targets/NVPTX.cpp | 2 +
clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 2 +
clang/unittests/Basic/CMakeLists.txt | 1 +
clang/unittests/Basic/OffloadArchTest.cpp | 36 ++++++
9 files changed, 320 insertions(+), 224 deletions(-)
create mode 100644 clang/include/clang/Basic/OffloadArch.h
create mode 100644 clang/lib/Basic/OffloadArch.cpp
create mode 100644 clang/unittests/Basic/OffloadArchTest.cpp
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..6fee1e2bc8c06
--- /dev/null
+++ b/clang/include/clang/Basic/OffloadArch.h
@@ -0,0 +1,143 @@
+//===--- 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.
+ // Intel CPUs
+ GRANITERAPIDS,
+ // Intel GPUs
+ BMG_G21,
+ 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;
+}
+
+static inline bool IsIntelCPUArch(OffloadArch Arch) {
+ return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21;
+}
+
+static inline bool IsIntelGPUArch(OffloadArch Arch) {
+ return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST;
+}
+
+static inline bool IsIntelOffloadArch(OffloadArch Arch) {
+ return IsIntelCPUArch(Arch) || IsIntelGPUArch(Arch);
+}
+
+const char *OffloadArchToString(OffloadArch A);
+const char *OffloadArchToVirtualArchString(OffloadArch A);
+
+// The input should have the form "sm_20".
+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..828c1ebf866fa
--- /dev/null
+++ b/clang/lib/Basic/OffloadArch.cpp
@@ -0,0 +1,133 @@
+#include "clang/Basic/OffloadArch.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include <algorithm>
+
+namespace clang {
+
+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"},
+ // Note: this is an initial list of Intel GPU and GPU offloading architectures.
+ // The list will be expanded later as support for more architectures is added.
+ // Intel CPUs
+ {OffloadArch::GRANITERAPIDS, "graniterapids", ""},
+ // Intel GPUS
+ {OffloadArch::BMG_G21, "bmg_g21", ""},
+ {OffloadArch::Generic, "generic", ""},
+ // clang-format on
+};
+#undef SM
+#undef SM2
+#undef GFX
+#undef INTEL
+
+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;
+}
+
+} // namespace clang
diff --git a/clang/lib/Basic/Targets/NVPTX.cpp b/clang/lib/Basic/Targets/NVPTX.cpp
index 08c8460045c6a..42b66d3559f6a 100644
--- a/clang/lib/Basic/Targets/NVPTX.cpp
+++ b/clang/lib/Basic/Targets/NVPTX.cpp
@@ -241,6 +241,8 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts,
case OffloadArch::GFX1201:
case OffloadArch::AMDGCNSPIRV:
case OffloadArch::Generic:
+ case OffloadArch::GRANITERAPIDS:
+ case OffloadArch::BMG_G21:
case OffloadArch::LAST:
break;
case OffloadArch::UNKNOWN:
diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
index f697c13f4c522..eed4471c38e4e 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
@@ -2335,6 +2335,8 @@ void CGOpenMPRuntimeGPU::processRequiresDirective(const OMPRequiresDecl *D) {
case OffloadArch::GFX1201:
case OffloadArch::AMDGCNSPIRV:
case OffloadArch::Generic:
+ case OffloadArch::GRANITERAPIDS:
+ case OffloadArch::BMG_G21:
case OffloadArch::UNUSED:
case OffloadArch::UNKNOWN:
break;
diff --git a/clang/unittests/Basic/CMakeLists.txt b/clang/unittests/Basic/CMakeLists.txt
index e818bd3e2c372..37b01cc9f66a8 100644
--- a/clang/unittests/Basic/CMakeLists.txt
+++ b/clang/unittests/Basic/CMakeLists.txt
@@ -5,6 +5,7 @@ add_clang_unittest(BasicTests
FileEntryTest.cpp
FileManagerTest.cpp
LineOffsetMappingTest.cpp
+ OffloadArchTest.cpp
SanitizersTest.cpp
SarifTest.cpp
SourceManagerTest.cpp
diff --git a/clang/unittests/Basic/OffloadArchTest.cpp b/clang/unittests/Basic/OffloadArchTest.cpp
new file mode 100644
index 0000000000000..964f5f2ad2603
--- /dev/null
+++ b/clang/unittests/Basic/OffloadArchTest.cpp
@@ -0,0 +1,36 @@
+//===- unittests/Basic/OffloadArchTest.cpp - Test OffloadArch -------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Basic/OffloadArch.h"
+#include "gtest/gtest.h"
+
+using namespace clang;
+
+TEST(OffloadArchTest, basic) {
+ EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_20));
+ EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_120a));
+ EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::GFX600));
+
+ EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::SM_120a));
+ EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX600));
+ EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX1201));
+ EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX12_GENERIC));
+ EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::AMDGCNSPIRV));
+ EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::GRANITERAPIDS));
+
+ EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::GRANITERAPIDS));
+ EXPECT_TRUE(IsIntelCPUArch(OffloadArch::GRANITERAPIDS));
+ EXPECT_FALSE(IsIntelGPUArch(OffloadArch::GRANITERAPIDS));
+ EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::BMG_G21));
+ EXPECT_FALSE(IsIntelCPUArch(OffloadArch::BMG_G21));
+ EXPECT_TRUE(IsIntelGPUArch(OffloadArch::BMG_G21));
+
+ EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::Generic));
+ EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::Generic));
+ EXPECT_FALSE(IsIntelOffloadArch(OffloadArch::Generic));
+}
>From 91b7c9de8cfb2df2075fcde974ba6221a44a4a20 Mon Sep 17 00:00:00 2001
From: "Cai, Justin" <justin.cai at intel.com>
Date: Thu, 24 Apr 2025 15:59:38 +0000
Subject: [PATCH 2/2] Address review comments
---
clang/include/clang/Basic/OffloadArch.h | 19 ++----------
clang/lib/Basic/OffloadArch.cpp | 7 -----
clang/lib/Basic/Targets/NVPTX.cpp | 2 --
clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 2 --
clang/unittests/Basic/CMakeLists.txt | 1 -
clang/unittests/Basic/OffloadArchTest.cpp | 36 -----------------------
6 files changed, 2 insertions(+), 65 deletions(-)
delete mode 100644 clang/unittests/Basic/OffloadArchTest.cpp
diff --git a/clang/include/clang/Basic/OffloadArch.h b/clang/include/clang/Basic/OffloadArch.h
index 6fee1e2bc8c06..c5ccd17e7a8be 100644
--- a/clang/include/clang/Basic/OffloadArch.h
+++ b/clang/include/clang/Basic/OffloadArch.h
@@ -101,10 +101,6 @@ enum class OffloadArch {
AMDGCNSPIRV,
Generic, // A processor model named 'generic' if the target backend defines a
// public one.
- // Intel CPUs
- GRANITERAPIDS,
- // Intel GPUs
- BMG_G21,
LAST,
CudaDefault = OffloadArch::SM_52,
@@ -120,22 +116,11 @@ static inline bool IsAMDOffloadArch(OffloadArch A) {
return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
}
-static inline bool IsIntelCPUArch(OffloadArch Arch) {
- return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21;
-}
-
-static inline bool IsIntelGPUArch(OffloadArch Arch) {
- return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST;
-}
-
-static inline bool IsIntelOffloadArch(OffloadArch Arch) {
- return IsIntelCPUArch(Arch) || IsIntelGPUArch(Arch);
-}
-
const char *OffloadArchToString(OffloadArch A);
const char *OffloadArchToVirtualArchString(OffloadArch A);
-// The input should have the form "sm_20".
+// Convert a string to an OffloadArch enum value. Returns
+// OffloadArch::UNKNOWN if the string is not recognized.
OffloadArch StringToOffloadArch(llvm::StringRef S);
} // namespace clang
diff --git a/clang/lib/Basic/OffloadArch.cpp b/clang/lib/Basic/OffloadArch.cpp
index 828c1ebf866fa..5135a73ddfddc 100644
--- a/clang/lib/Basic/OffloadArch.cpp
+++ b/clang/lib/Basic/OffloadArch.cpp
@@ -89,19 +89,12 @@ static const OffloadArchToStringMap arch_names[] = {
GFX(1200), // gfx1200
GFX(1201), // gfx1201
{OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
- // Note: this is an initial list of Intel GPU and GPU offloading architectures.
- // The list will be expanded later as support for more architectures is added.
- // Intel CPUs
- {OffloadArch::GRANITERAPIDS, "graniterapids", ""},
- // Intel GPUS
- {OffloadArch::BMG_G21, "bmg_g21", ""},
{OffloadArch::Generic, "generic", ""},
// clang-format on
};
#undef SM
#undef SM2
#undef GFX
-#undef INTEL
const char *OffloadArchToString(OffloadArch A) {
auto result = std::find_if(
diff --git a/clang/lib/Basic/Targets/NVPTX.cpp b/clang/lib/Basic/Targets/NVPTX.cpp
index 42b66d3559f6a..08c8460045c6a 100644
--- a/clang/lib/Basic/Targets/NVPTX.cpp
+++ b/clang/lib/Basic/Targets/NVPTX.cpp
@@ -241,8 +241,6 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts,
case OffloadArch::GFX1201:
case OffloadArch::AMDGCNSPIRV:
case OffloadArch::Generic:
- case OffloadArch::GRANITERAPIDS:
- case OffloadArch::BMG_G21:
case OffloadArch::LAST:
break;
case OffloadArch::UNKNOWN:
diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
index eed4471c38e4e..f697c13f4c522 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
@@ -2335,8 +2335,6 @@ void CGOpenMPRuntimeGPU::processRequiresDirective(const OMPRequiresDecl *D) {
case OffloadArch::GFX1201:
case OffloadArch::AMDGCNSPIRV:
case OffloadArch::Generic:
- case OffloadArch::GRANITERAPIDS:
- case OffloadArch::BMG_G21:
case OffloadArch::UNUSED:
case OffloadArch::UNKNOWN:
break;
diff --git a/clang/unittests/Basic/CMakeLists.txt b/clang/unittests/Basic/CMakeLists.txt
index 37b01cc9f66a8..e818bd3e2c372 100644
--- a/clang/unittests/Basic/CMakeLists.txt
+++ b/clang/unittests/Basic/CMakeLists.txt
@@ -5,7 +5,6 @@ add_clang_unittest(BasicTests
FileEntryTest.cpp
FileManagerTest.cpp
LineOffsetMappingTest.cpp
- OffloadArchTest.cpp
SanitizersTest.cpp
SarifTest.cpp
SourceManagerTest.cpp
diff --git a/clang/unittests/Basic/OffloadArchTest.cpp b/clang/unittests/Basic/OffloadArchTest.cpp
deleted file mode 100644
index 964f5f2ad2603..0000000000000
--- a/clang/unittests/Basic/OffloadArchTest.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-//===- unittests/Basic/OffloadArchTest.cpp - Test OffloadArch -------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#include "clang/Basic/OffloadArch.h"
-#include "gtest/gtest.h"
-
-using namespace clang;
-
-TEST(OffloadArchTest, basic) {
- EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_20));
- EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_120a));
- EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::GFX600));
-
- EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::SM_120a));
- EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX600));
- EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX1201));
- EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX12_GENERIC));
- EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::AMDGCNSPIRV));
- EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::GRANITERAPIDS));
-
- EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::GRANITERAPIDS));
- EXPECT_TRUE(IsIntelCPUArch(OffloadArch::GRANITERAPIDS));
- EXPECT_FALSE(IsIntelGPUArch(OffloadArch::GRANITERAPIDS));
- EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::BMG_G21));
- EXPECT_FALSE(IsIntelCPUArch(OffloadArch::BMG_G21));
- EXPECT_TRUE(IsIntelGPUArch(OffloadArch::BMG_G21));
-
- EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::Generic));
- EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::Generic));
- EXPECT_FALSE(IsIntelOffloadArch(OffloadArch::Generic));
-}
More information about the cfe-commits
mailing list