Skip to content

Commit c8034f5

Browse files
srividya-sundarammdtoguchi
authored andcommitted
Refactor sycl offload (#19464)
Co-authored-by: Michael D Toguchi <[email protected]>
1 parent 3395f81 commit c8034f5

File tree

11 files changed

+477
-485
lines changed

11 files changed

+477
-485
lines changed

clang/include/clang/Basic/OffloadArch.h

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace llvm {
1313
class StringRef;
14+
template <typename T, typename R> class StringSwitch;
1415
} // namespace llvm
1516

1617
namespace clang {
@@ -103,9 +104,62 @@ enum class OffloadArch {
103104
Generic, // A processor model named 'generic' if the target backend defines a
104105
// public one.
105106
// Intel CPUs
107+
SKYLAKEAVX512,
108+
COREAVX2,
109+
COREI7AVX,
110+
COREI7,
111+
WESTMERE,
112+
SANDYBRIDGE,
113+
IVYBRIDGE,
114+
BROADWELL,
115+
COFFEELAKE,
116+
ALDERLAKE,
117+
SKYLAKE,
118+
SKX,
119+
CASCADELAKE,
120+
ICELAKECLIENT,
121+
ICELAKESERVER,
122+
SAPPHIRERAPIDS,
106123
GRANITERAPIDS,
107124
// Intel GPUs
125+
BDW,
126+
SKL,
127+
KBL,
128+
CFL,
129+
APL,
130+
BXT,
131+
GLK,
132+
WHL,
133+
AML,
134+
CML,
135+
ICLLP,
136+
ICL,
137+
EHL,
138+
JSL,
139+
TGLLP,
140+
TGL,
141+
RKL,
142+
ADL_S,
143+
RPL_S,
144+
ADL_P,
145+
ADL_N,
146+
DG1,
147+
ACM_G10,
148+
DG2_G10,
149+
ACM_G11,
150+
DG2_G11,
151+
ACM_G12,
152+
DG2_G12,
153+
PVC,
154+
PVC_VG,
155+
MTL_U,
156+
MTL_S,
157+
ARL_U,
158+
ARL_S,
159+
MTL_H,
160+
ARL_H,
108161
BMG_G21,
162+
LNL_M,
109163
LAST,
110164

111165
CudaDefault = OffloadArch::SM_52,
@@ -122,17 +176,41 @@ static inline bool IsAMDOffloadArch(OffloadArch A) {
122176
}
123177

124178
static inline bool IsIntelCPUOffloadArch(OffloadArch Arch) {
125-
return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21;
179+
return Arch >= OffloadArch::SKYLAKEAVX512 &&
180+
Arch <= OffloadArch::GRANITERAPIDS;
126181
}
127182

128183
static inline bool IsIntelGPUOffloadArch(OffloadArch Arch) {
129-
return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST;
184+
return Arch >= OffloadArch::BDW && Arch < OffloadArch::LAST;
130185
}
131186

132187
static inline bool IsIntelOffloadArch(OffloadArch Arch) {
133188
return IsIntelCPUOffloadArch(Arch) || IsIntelGPUOffloadArch(Arch);
134189
}
135190

191+
// Check if the given Arch value is a Generic AMD GPU.
192+
// Currently GFX*_GENERIC AMD GPUs do not support SYCL offloading.
193+
// This list is used to filter out GFX*_GENERIC AMD GPUs in
194+
// `IsSYCLSupportedAMDGPUArch`.
195+
static inline bool IsAMDGenericGPUArch(OffloadArch Arch) {
196+
return Arch == OffloadArch::GFX9_GENERIC ||
197+
Arch == OffloadArch::GFX10_1_GENERIC ||
198+
Arch == OffloadArch::GFX10_3_GENERIC ||
199+
Arch == OffloadArch::GFX11_GENERIC ||
200+
Arch == OffloadArch::GFX12_GENERIC;
201+
}
202+
203+
// Check if the given Arch value is a valid SYCL supported AMD GPU.
204+
static inline bool IsSYCLSupportedAMDGPUArch(OffloadArch Arch) {
205+
return Arch >= OffloadArch::GFX700 && Arch < OffloadArch::AMDGCNSPIRV &&
206+
!IsAMDGenericGPUArch(Arch);
207+
}
208+
209+
// Check if the given Arch value is a valid SYCL supported NVidia GPU.
210+
static inline bool IsSYCLSupportedNVidiaGPUArch(OffloadArch Arch) {
211+
return Arch >= OffloadArch::SM_50 && Arch <= OffloadArch::SM_90a;
212+
}
213+
136214
const char *OffloadArchToString(OffloadArch A);
137215
const char *OffloadArchToVirtualArchString(OffloadArch A);
138216

clang/lib/Basic/OffloadArch.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,62 @@ static const OffloadArchToStringMap ArchNames[] = {
8989
GFX(1250), // gfx1250
9090
{OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
9191
// Intel CPUs
92+
{OffloadArch::SKYLAKEAVX512, "skylake-avx512", ""},
93+
{OffloadArch::COREAVX2, "core-avx2", ""},
94+
{OffloadArch::COREI7AVX, "corei7-avx", ""},
95+
{OffloadArch::COREI7, "corei7", ""},
96+
{OffloadArch::WESTMERE, "westmere", ""},
97+
{OffloadArch::SANDYBRIDGE, "sandybridge", ""},
98+
{OffloadArch::IVYBRIDGE, "ivybridge", ""},
99+
{OffloadArch::BROADWELL, "broadwell", ""},
100+
{OffloadArch::COFFEELAKE, "coffeelake", ""},
101+
{OffloadArch::ALDERLAKE, "alderlake", ""},
102+
{OffloadArch::SKYLAKE, "skylake", ""},
103+
{OffloadArch::SKX, "skx", ""},
104+
{OffloadArch::CASCADELAKE, "cascadelake", ""},
105+
{OffloadArch::ICELAKECLIENT, "icelake-client", ""},
106+
{OffloadArch::ICELAKESERVER, "icelake-server", ""},
107+
{OffloadArch::SAPPHIRERAPIDS, "sapphirerapids", ""},
92108
{OffloadArch::GRANITERAPIDS, "graniterapids", ""},
93109
// Intel GPUS
110+
{OffloadArch::BDW, "bdw", ""},
111+
{OffloadArch::SKL, "skl", ""},
112+
{OffloadArch::KBL, "kbl", ""},
113+
{OffloadArch::CFL, "cfl", ""},
114+
{OffloadArch::APL, "apl", ""},
115+
{OffloadArch::BXT, "bxt", ""},
116+
{OffloadArch::GLK, "glk", ""},
117+
{OffloadArch::WHL, "whl", ""},
118+
{OffloadArch::AML, "aml", ""},
119+
{OffloadArch::CML, "cml", ""},
120+
{OffloadArch::ICLLP, "icllp", ""},
121+
{OffloadArch::ICL, "icl", ""},
122+
{OffloadArch::EHL, "ehl", ""},
123+
{OffloadArch::JSL, "jsl", ""},
124+
{OffloadArch::TGLLP, "tgllp", ""},
125+
{OffloadArch::TGL, "tgl", ""},
126+
{OffloadArch::RKL, "rkl", ""},
127+
{OffloadArch::ADL_S, "adl_s", ""},
128+
{OffloadArch::RPL_S, "rpl_s", ""},
129+
{OffloadArch::ADL_P, "adl_p", ""},
130+
{OffloadArch::ADL_N, "adl_n", ""},
131+
{OffloadArch::DG1, "dg1", ""},
132+
{OffloadArch::ACM_G10, "acm_g10", ""},
133+
{OffloadArch::DG2_G10, "dg2_g10", ""},
134+
{OffloadArch::ACM_G11, "acm_g11", ""},
135+
{OffloadArch::DG2_G11, "dg2_g11", ""},
136+
{OffloadArch::ACM_G12, "acm_g12", ""},
137+
{OffloadArch::DG2_G12, "dg2_g12", ""},
138+
{OffloadArch::PVC, "pvc", ""},
139+
{OffloadArch::PVC_VG, "pvc_vg", ""},
140+
{OffloadArch::MTL_U, "mtl_u", ""},
141+
{OffloadArch::MTL_S, "mtl_s", ""},
142+
{OffloadArch::ARL_U, "arl_u", ""},
143+
{OffloadArch::ARL_S, "arl_s", ""},
144+
{OffloadArch::MTL_H, "mtl_h", ""},
145+
{OffloadArch::ARL_H, "arl_h", ""},
94146
{OffloadArch::BMG_G21, "bmg_g21", ""},
147+
{OffloadArch::LNL_M, "lnl_m", ""},
95148
{OffloadArch::Generic, "generic", ""},
96149
// clang-format on
97150
};

0 commit comments

Comments
 (0)