Skip to content

Commit faf4e8a

Browse files
authored
[Clang][SYCL] Add initial set of Intel OffloadArch values (llvm#138158)
Following llvm#137070, this PR adds an initial set of Intel `OffloadArch` values with corresponding predicates that will be used in SYCL offloading. More Intel architectures will be added in a future PR.
1 parent 9400270 commit faf4e8a

File tree

6 files changed

+61
-0
lines changed

6 files changed

+61
-0
lines changed

clang/include/clang/Basic/OffloadArch.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ enum class OffloadArch {
101101
AMDGCNSPIRV,
102102
Generic, // A processor model named 'generic' if the target backend defines a
103103
// public one.
104+
// Intel CPUs
105+
GRANITERAPIDS,
106+
// Intel GPUs
107+
BMG_G21,
104108
LAST,
105109

106110
CudaDefault = OffloadArch::SM_52,
@@ -116,6 +120,18 @@ static inline bool IsAMDOffloadArch(OffloadArch A) {
116120
return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
117121
}
118122

123+
static inline bool IsIntelCPUOffloadArch(OffloadArch Arch) {
124+
return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21;
125+
}
126+
127+
static inline bool IsIntelGPUOffloadArch(OffloadArch Arch) {
128+
return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST;
129+
}
130+
131+
static inline bool IsIntelOffloadArch(OffloadArch Arch) {
132+
return IsIntelCPUOffloadArch(Arch) || IsIntelGPUOffloadArch(Arch);
133+
}
134+
119135
const char *OffloadArchToString(OffloadArch A);
120136
const char *OffloadArchToVirtualArchString(OffloadArch A);
121137

clang/lib/Basic/OffloadArch.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ static const OffloadArchToStringMap ArchNames[] = {
8787
GFX(1200), // gfx1200
8888
GFX(1201), // gfx1201
8989
{OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
90+
// Intel CPUs
91+
{OffloadArch::GRANITERAPIDS, "graniterapids", ""},
92+
// Intel GPUS
93+
{OffloadArch::BMG_G21, "bmg_g21", ""},
9094
{OffloadArch::Generic, "generic", ""},
9195
// clang-format on
9296
};

clang/lib/Basic/Targets/NVPTX.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts,
241241
case OffloadArch::GFX1201:
242242
case OffloadArch::AMDGCNSPIRV:
243243
case OffloadArch::Generic:
244+
case OffloadArch::GRANITERAPIDS:
245+
case OffloadArch::BMG_G21:
244246
case OffloadArch::LAST:
245247
break;
246248
case OffloadArch::UNKNOWN:

clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2334,6 +2334,8 @@ void CGOpenMPRuntimeGPU::processRequiresDirective(const OMPRequiresDecl *D) {
23342334
case OffloadArch::GFX1201:
23352335
case OffloadArch::AMDGCNSPIRV:
23362336
case OffloadArch::Generic:
2337+
case OffloadArch::GRANITERAPIDS:
2338+
case OffloadArch::BMG_G21:
23372339
case OffloadArch::UNUSED:
23382340
case OffloadArch::UNKNOWN:
23392341
break;

clang/unittests/Basic/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ add_distinct_clang_unittest(BasicTests
77
FileEntryTest.cpp
88
FileManagerTest.cpp
99
LineOffsetMappingTest.cpp
10+
OffloadArchTest.cpp
1011
SanitizersTest.cpp
1112
SarifTest.cpp
1213
SourceManagerTest.cpp
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//===- unittests/Basic/OffloadArchTest.cpp - Test OffloadArch -------===//
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+
#include "clang/Basic/OffloadArch.h"
10+
#include "gtest/gtest.h"
11+
12+
using namespace clang;
13+
14+
TEST(OffloadArchTest, basic) {
15+
EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_20));
16+
EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_120a));
17+
EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::GFX600));
18+
19+
EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::SM_120a));
20+
EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX600));
21+
EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX1201));
22+
EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX12_GENERIC));
23+
EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::AMDGCNSPIRV));
24+
EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::GRANITERAPIDS));
25+
26+
EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::GRANITERAPIDS));
27+
EXPECT_TRUE(IsIntelCPUOffloadArch(OffloadArch::GRANITERAPIDS));
28+
EXPECT_FALSE(IsIntelGPUOffloadArch(OffloadArch::GRANITERAPIDS));
29+
EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::BMG_G21));
30+
EXPECT_FALSE(IsIntelCPUOffloadArch(OffloadArch::BMG_G21));
31+
EXPECT_TRUE(IsIntelGPUOffloadArch(OffloadArch::BMG_G21));
32+
33+
EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::Generic));
34+
EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::Generic));
35+
EXPECT_FALSE(IsIntelOffloadArch(OffloadArch::Generic));
36+
}

0 commit comments

Comments
 (0)