Skip to content

Commit 924f542

Browse files
committed
[Clang] Move OffloadArch enum to a generic location and add initial set of Intel OffloadArch values
1 parent ff6a23d commit 924f542

File tree

9 files changed

+320
-224
lines changed

9 files changed

+320
-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: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
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+
// Intel CPUs
105+
GRANITERAPIDS,
106+
// Intel GPUs
107+
BMG_G21,
108+
LAST,
109+
110+
CudaDefault = OffloadArch::SM_52,
111+
HIPDefault = OffloadArch::GFX906,
112+
};
113+
114+
static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
115+
return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
116+
}
117+
118+
static inline bool IsAMDOffloadArch(OffloadArch A) {
119+
// Generic processor model is for testing only.
120+
return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
121+
}
122+
123+
static inline bool IsIntelCPUArch(OffloadArch Arch) {
124+
return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21;
125+
}
126+
127+
static inline bool IsIntelGPUArch(OffloadArch Arch) {
128+
return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST;
129+
}
130+
131+
static inline bool IsIntelOffloadArch(OffloadArch Arch) {
132+
return IsIntelCPUArch(Arch) || IsIntelGPUArch(Arch);
133+
}
134+
135+
const char *OffloadArchToString(OffloadArch A);
136+
const char *OffloadArchToVirtualArchString(OffloadArch A);
137+
138+
// The input should have the form "sm_20".
139+
OffloadArch StringToOffloadArch(llvm::StringRef S);
140+
141+
} // namespace clang
142+
143+
#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

0 commit comments

Comments
 (0)