Skip to content

Commit ea443ee

Browse files
authored
[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.
1 parent 480f1a4 commit ea443ee

File tree

5 files changed

+257
-224
lines changed

5 files changed

+257
-224
lines changed

clang/include/clang/Basic/Cuda.h

Lines changed: 2 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#ifndef LLVM_CLANG_BASIC_CUDA_H
1010
#define LLVM_CLANG_BASIC_CUDA_H
1111

12+
#include "clang/Basic/OffloadArch.h"
13+
1214
namespace llvm {
1315
class StringRef;
1416
class Twine;
@@ -54,98 +56,6 @@ const char *CudaVersionToString(CudaVersion V);
5456
// Input is "Major.Minor"
5557
CudaVersion CudaStringToVersion(const llvm::Twine &S);
5658

57-
enum class OffloadArch {
58-
UNUSED,
59-
UNKNOWN,
60-
// TODO: Deprecate and remove GPU architectures older than sm_52.
61-
SM_20,
62-
SM_21,
63-
SM_30,
64-
// This has a name conflict with sys/mac.h on AIX, rename it as a workaround.
65-
SM_32_,
66-
SM_35,
67-
SM_37,
68-
SM_50,
69-
SM_52,
70-
SM_53,
71-
SM_60,
72-
SM_61,
73-
SM_62,
74-
SM_70,
75-
SM_72,
76-
SM_75,
77-
SM_80,
78-
SM_86,
79-
SM_87,
80-
SM_89,
81-
SM_90,
82-
SM_90a,
83-
SM_100,
84-
SM_100a,
85-
SM_101,
86-
SM_101a,
87-
SM_120,
88-
SM_120a,
89-
GFX600,
90-
GFX601,
91-
GFX602,
92-
GFX700,
93-
GFX701,
94-
GFX702,
95-
GFX703,
96-
GFX704,
97-
GFX705,
98-
GFX801,
99-
GFX802,
100-
GFX803,
101-
GFX805,
102-
GFX810,
103-
GFX9_GENERIC,
104-
GFX900,
105-
GFX902,
106-
GFX904,
107-
GFX906,
108-
GFX908,
109-
GFX909,
110-
GFX90a,
111-
GFX90c,
112-
GFX9_4_GENERIC,
113-
GFX942,
114-
GFX950,
115-
GFX10_1_GENERIC,
116-
GFX1010,
117-
GFX1011,
118-
GFX1012,
119-
GFX1013,
120-
GFX10_3_GENERIC,
121-
GFX1030,
122-
GFX1031,
123-
GFX1032,
124-
GFX1033,
125-
GFX1034,
126-
GFX1035,
127-
GFX1036,
128-
GFX11_GENERIC,
129-
GFX1100,
130-
GFX1101,
131-
GFX1102,
132-
GFX1103,
133-
GFX1150,
134-
GFX1151,
135-
GFX1152,
136-
GFX1153,
137-
GFX12_GENERIC,
138-
GFX1200,
139-
GFX1201,
140-
AMDGCNSPIRV,
141-
Generic, // A processor model named 'generic' if the target backend defines a
142-
// public one.
143-
LAST,
144-
145-
CudaDefault = OffloadArch::SM_52,
146-
HIPDefault = OffloadArch::GFX906,
147-
};
148-
14959
enum class CUDAFunctionTarget {
15060
Device,
15161
Global,
@@ -154,21 +64,6 @@ enum class CUDAFunctionTarget {
15464
InvalidTarget
15565
};
15666

157-
static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
158-
return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
159-
}
160-
161-
static inline bool IsAMDOffloadArch(OffloadArch A) {
162-
// Generic processor model is for testing only.
163-
return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
164-
}
165-
166-
const char *OffloadArchToString(OffloadArch A);
167-
const char *OffloadArchToVirtualArchString(OffloadArch A);
168-
169-
// The input should have the form "sm_20".
170-
OffloadArch StringToOffloadArch(llvm::StringRef S);
171-
17267
/// Get the earliest CudaVersion that supports the given OffloadArch.
17368
CudaVersion MinVersionForOffloadArch(OffloadArch A);
17469

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
//===--- OffloadArch.h - Definition of offloading architectures --- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_CLANG_BASIC_OFFLOADARCH_H
10+
#define LLVM_CLANG_BASIC_OFFLOADARCH_H
11+
12+
namespace llvm {
13+
class StringRef;
14+
} // namespace llvm
15+
16+
namespace clang {
17+
18+
enum class OffloadArch {
19+
UNUSED,
20+
UNKNOWN,
21+
// TODO: Deprecate and remove GPU architectures older than sm_52.
22+
SM_20,
23+
SM_21,
24+
SM_30,
25+
// This has a name conflict with sys/mac.h on AIX, rename it as a workaround.
26+
SM_32_,
27+
SM_35,
28+
SM_37,
29+
SM_50,
30+
SM_52,
31+
SM_53,
32+
SM_60,
33+
SM_61,
34+
SM_62,
35+
SM_70,
36+
SM_72,
37+
SM_75,
38+
SM_80,
39+
SM_86,
40+
SM_87,
41+
SM_89,
42+
SM_90,
43+
SM_90a,
44+
SM_100,
45+
SM_100a,
46+
SM_101,
47+
SM_101a,
48+
SM_120,
49+
SM_120a,
50+
GFX600,
51+
GFX601,
52+
GFX602,
53+
GFX700,
54+
GFX701,
55+
GFX702,
56+
GFX703,
57+
GFX704,
58+
GFX705,
59+
GFX801,
60+
GFX802,
61+
GFX803,
62+
GFX805,
63+
GFX810,
64+
GFX9_GENERIC,
65+
GFX900,
66+
GFX902,
67+
GFX904,
68+
GFX906,
69+
GFX908,
70+
GFX909,
71+
GFX90a,
72+
GFX90c,
73+
GFX9_4_GENERIC,
74+
GFX942,
75+
GFX950,
76+
GFX10_1_GENERIC,
77+
GFX1010,
78+
GFX1011,
79+
GFX1012,
80+
GFX1013,
81+
GFX10_3_GENERIC,
82+
GFX1030,
83+
GFX1031,
84+
GFX1032,
85+
GFX1033,
86+
GFX1034,
87+
GFX1035,
88+
GFX1036,
89+
GFX11_GENERIC,
90+
GFX1100,
91+
GFX1101,
92+
GFX1102,
93+
GFX1103,
94+
GFX1150,
95+
GFX1151,
96+
GFX1152,
97+
GFX1153,
98+
GFX12_GENERIC,
99+
GFX1200,
100+
GFX1201,
101+
AMDGCNSPIRV,
102+
Generic, // A processor model named 'generic' if the target backend defines a
103+
// public one.
104+
LAST,
105+
106+
CudaDefault = OffloadArch::SM_52,
107+
HIPDefault = OffloadArch::GFX906,
108+
};
109+
110+
static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
111+
return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
112+
}
113+
114+
static inline bool IsAMDOffloadArch(OffloadArch A) {
115+
// Generic processor model is for testing only.
116+
return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
117+
}
118+
119+
const char *OffloadArchToString(OffloadArch A);
120+
const char *OffloadArchToVirtualArchString(OffloadArch A);
121+
122+
// Convert a string to an OffloadArch enum value. Returns
123+
// OffloadArch::UNKNOWN if the string is not recognized.
124+
OffloadArch StringToOffloadArch(llvm::StringRef S);
125+
126+
} // namespace clang
127+
128+
#endif // LLVM_CLANG_BASIC_OFFLOADARCH_H

clang/lib/Basic/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ add_clang_library(clangBasic
7676
MakeSupport.cpp
7777
Module.cpp
7878
ObjCRuntime.cpp
79+
OffloadArch.cpp
7980
OpenCLOptions.cpp
8081
OpenMPKinds.cpp
8182
OperatorPrecedence.cpp

clang/lib/Basic/Cuda.cpp

Lines changed: 0 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -73,123 +73,6 @@ CudaVersion ToCudaVersion(llvm::VersionTuple Version) {
7373
return CudaVersion::UNKNOWN;
7474
}
7575

76-
namespace {
77-
struct OffloadArchToStringMap {
78-
OffloadArch arch;
79-
const char *arch_name;
80-
const char *virtual_arch_name;
81-
};
82-
} // namespace
83-
84-
#define SM2(sm, ca) {OffloadArch::SM_##sm, "sm_" #sm, ca}
85-
#define SM(sm) SM2(sm, "compute_" #sm)
86-
#define GFX(gpu) {OffloadArch::GFX##gpu, "gfx" #gpu, "compute_amdgcn"}
87-
static const OffloadArchToStringMap arch_names[] = {
88-
// clang-format off
89-
{OffloadArch::UNUSED, "", ""},
90-
SM2(20, "compute_20"), SM2(21, "compute_20"), // Fermi
91-
SM(30), {OffloadArch::SM_32_, "sm_32", "compute_32"}, SM(35), SM(37), // Kepler
92-
SM(50), SM(52), SM(53), // Maxwell
93-
SM(60), SM(61), SM(62), // Pascal
94-
SM(70), SM(72), // Volta
95-
SM(75), // Turing
96-
SM(80), SM(86), // Ampere
97-
SM(87), // Jetson/Drive AGX Orin
98-
SM(89), // Ada Lovelace
99-
SM(90), // Hopper
100-
SM(90a), // Hopper
101-
SM(100), // Blackwell
102-
SM(100a), // Blackwell
103-
SM(101), // Blackwell
104-
SM(101a), // Blackwell
105-
SM(120), // Blackwell
106-
SM(120a), // Blackwell
107-
GFX(600), // gfx600
108-
GFX(601), // gfx601
109-
GFX(602), // gfx602
110-
GFX(700), // gfx700
111-
GFX(701), // gfx701
112-
GFX(702), // gfx702
113-
GFX(703), // gfx703
114-
GFX(704), // gfx704
115-
GFX(705), // gfx705
116-
GFX(801), // gfx801
117-
GFX(802), // gfx802
118-
GFX(803), // gfx803
119-
GFX(805), // gfx805
120-
GFX(810), // gfx810
121-
{OffloadArch::GFX9_GENERIC, "gfx9-generic", "compute_amdgcn"},
122-
GFX(900), // gfx900
123-
GFX(902), // gfx902
124-
GFX(904), // gfx903
125-
GFX(906), // gfx906
126-
GFX(908), // gfx908
127-
GFX(909), // gfx909
128-
GFX(90a), // gfx90a
129-
GFX(90c), // gfx90c
130-
{OffloadArch::GFX9_4_GENERIC, "gfx9-4-generic", "compute_amdgcn"},
131-
GFX(942), // gfx942
132-
GFX(950), // gfx950
133-
{OffloadArch::GFX10_1_GENERIC, "gfx10-1-generic", "compute_amdgcn"},
134-
GFX(1010), // gfx1010
135-
GFX(1011), // gfx1011
136-
GFX(1012), // gfx1012
137-
GFX(1013), // gfx1013
138-
{OffloadArch::GFX10_3_GENERIC, "gfx10-3-generic", "compute_amdgcn"},
139-
GFX(1030), // gfx1030
140-
GFX(1031), // gfx1031
141-
GFX(1032), // gfx1032
142-
GFX(1033), // gfx1033
143-
GFX(1034), // gfx1034
144-
GFX(1035), // gfx1035
145-
GFX(1036), // gfx1036
146-
{OffloadArch::GFX11_GENERIC, "gfx11-generic", "compute_amdgcn"},
147-
GFX(1100), // gfx1100
148-
GFX(1101), // gfx1101
149-
GFX(1102), // gfx1102
150-
GFX(1103), // gfx1103
151-
GFX(1150), // gfx1150
152-
GFX(1151), // gfx1151
153-
GFX(1152), // gfx1152
154-
GFX(1153), // gfx1153
155-
{OffloadArch::GFX12_GENERIC, "gfx12-generic", "compute_amdgcn"},
156-
GFX(1200), // gfx1200
157-
GFX(1201), // gfx1201
158-
{OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
159-
{OffloadArch::Generic, "generic", ""},
160-
// clang-format on
161-
};
162-
#undef SM
163-
#undef SM2
164-
#undef GFX
165-
166-
const char *OffloadArchToString(OffloadArch A) {
167-
auto result = std::find_if(
168-
std::begin(arch_names), std::end(arch_names),
169-
[A](const OffloadArchToStringMap &map) { return A == map.arch; });
170-
if (result == std::end(arch_names))
171-
return "unknown";
172-
return result->arch_name;
173-
}
174-
175-
const char *OffloadArchToVirtualArchString(OffloadArch A) {
176-
auto result = std::find_if(
177-
std::begin(arch_names), std::end(arch_names),
178-
[A](const OffloadArchToStringMap &map) { return A == map.arch; });
179-
if (result == std::end(arch_names))
180-
return "unknown";
181-
return result->virtual_arch_name;
182-
}
183-
184-
OffloadArch StringToOffloadArch(llvm::StringRef S) {
185-
auto result = std::find_if(
186-
std::begin(arch_names), std::end(arch_names),
187-
[S](const OffloadArchToStringMap &map) { return S == map.arch_name; });
188-
if (result == std::end(arch_names))
189-
return OffloadArch::UNKNOWN;
190-
return result->arch;
191-
}
192-
19376
CudaVersion MinVersionForOffloadArch(OffloadArch A) {
19477
if (A == OffloadArch::UNKNOWN)
19578
return CudaVersion::UNKNOWN;

0 commit comments

Comments
 (0)