clang 22.0.0git
OffloadArch.cpp
Go to the documentation of this file.
2
3#include "llvm/ADT/STLExtras.h"
4#include "llvm/ADT/StringRef.h"
5
6namespace clang {
7
8namespace {
9struct OffloadArchToStringMap {
11 const char *ArchName;
12 const char *VirtualArchName;
13};
14} // namespace
15
16#define SM(sm) {OffloadArch::SM_##sm, "sm_" #sm, "compute_" #sm}
17#define GFX(gpu) {OffloadArch::GFX##gpu, "gfx" #gpu, "compute_amdgcn"}
18static const OffloadArchToStringMap ArchNames[] = {
19 // clang-format off
20 {OffloadArch::UNUSED, "", ""},
21 SM(20), {OffloadArch::SM_21, "sm_21", "compute_20"}, // Fermi
22 SM(30), {OffloadArch::SM_32_, "sm_32", "compute_32"}, SM(35), SM(37), // Kepler
23 SM(50), SM(52), SM(53), // Maxwell
24 SM(60), SM(61), SM(62), // Pascal
25 SM(70), SM(72), // Volta
26 SM(75), // Turing
27 SM(80), SM(86), // Ampere
28 SM(87), // Jetson/Drive AGX Orin
29 SM(89), // Ada Lovelace
30 SM(90), // Hopper
31 SM(90a), // Hopper
32 SM(100), // Blackwell
33 SM(100a), // Blackwell
34 SM(101), // Blackwell
35 SM(101a), // Blackwell
36 SM(103), // Blackwell
37 SM(103a), // Blackwell
38 SM(120), // Blackwell
39 SM(120a), // Blackwell
40 SM(121), // Blackwell
41 SM(121a), // Blackwell
42 GFX(600), // gfx600
43 GFX(601), // gfx601
44 GFX(602), // gfx602
45 GFX(700), // gfx700
46 GFX(701), // gfx701
47 GFX(702), // gfx702
48 GFX(703), // gfx703
49 GFX(704), // gfx704
50 GFX(705), // gfx705
51 GFX(801), // gfx801
52 GFX(802), // gfx802
53 GFX(803), // gfx803
54 GFX(805), // gfx805
55 GFX(810), // gfx810
56 {OffloadArch::GFX9_GENERIC, "gfx9-generic", "compute_amdgcn"},
57 GFX(900), // gfx900
58 GFX(902), // gfx902
59 GFX(904), // gfx903
60 GFX(906), // gfx906
61 GFX(908), // gfx908
62 GFX(909), // gfx909
63 GFX(90a), // gfx90a
64 GFX(90c), // gfx90c
65 {OffloadArch::GFX9_4_GENERIC, "gfx9-4-generic", "compute_amdgcn"},
66 GFX(942), // gfx942
67 GFX(950), // gfx950
68 {OffloadArch::GFX10_1_GENERIC, "gfx10-1-generic", "compute_amdgcn"},
69 GFX(1010), // gfx1010
70 GFX(1011), // gfx1011
71 GFX(1012), // gfx1012
72 GFX(1013), // gfx1013
73 {OffloadArch::GFX10_3_GENERIC, "gfx10-3-generic", "compute_amdgcn"},
74 GFX(1030), // gfx1030
75 GFX(1031), // gfx1031
76 GFX(1032), // gfx1032
77 GFX(1033), // gfx1033
78 GFX(1034), // gfx1034
79 GFX(1035), // gfx1035
80 GFX(1036), // gfx1036
81 {OffloadArch::GFX11_GENERIC, "gfx11-generic", "compute_amdgcn"},
82 GFX(1100), // gfx1100
83 GFX(1101), // gfx1101
84 GFX(1102), // gfx1102
85 GFX(1103), // gfx1103
86 GFX(1150), // gfx1150
87 GFX(1151), // gfx1151
88 GFX(1152), // gfx1152
89 GFX(1153), // gfx1153
90 {OffloadArch::GFX12_GENERIC, "gfx12-generic", "compute_amdgcn"},
91 GFX(1200), // gfx1200
92 GFX(1201), // gfx1201
93 GFX(1250), // gfx1250
94 {OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
95 // Intel CPUs
96 {OffloadArch::GRANITERAPIDS, "graniterapids", ""},
97 // Intel GPUS
98 {OffloadArch::BMG_G21, "bmg_g21", ""},
99 {OffloadArch::Generic, "generic", ""},
100 // clang-format on
101};
102#undef SM
103#undef GFX
104
106 auto Result =
107 llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {
108 return A == Map.Arch;
109 });
110 if (Result == std::end(ArchNames))
111 return "unknown";
112 return Result->ArchName;
113}
114
116 auto Result =
117 llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {
118 return A == Map.Arch;
119 });
120 if (Result == std::end(ArchNames))
121 return "unknown";
122 return Result->VirtualArchName;
123}
124
126 auto Result =
127 llvm::find_if(ArchNames, [S](const OffloadArchToStringMap &Map) {
128 return S == Map.ArchName;
129 });
130 if (Result == std::end(ArchNames))
132 return Result->Arch;
133}
134
135} // namespace clang
const char * VirtualArchName
Definition: OffloadArch.cpp:12
#define GFX(gpu)
Definition: OffloadArch.cpp:17
#define SM(sm)
Definition: OffloadArch.cpp:16
OffloadArch Arch
Definition: OffloadArch.cpp:10
const char * ArchName
Definition: OffloadArch.cpp:11
__device__ __2f16 float c
The JSON file list parser is used to communicate input to InstallAPI.
static const OffloadArchToStringMap ArchNames[]
Definition: OffloadArch.cpp:18
OffloadArch
Definition: OffloadArch.h:18
@ Result
The result type of a method or function.
const char * OffloadArchToVirtualArchString(OffloadArch A)
OffloadArch StringToOffloadArch(llvm::StringRef S)
const char * OffloadArchToString(OffloadArch A)