Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/clang/lib/Basic/OffloadArch.cpp
213765 views
1
#include "clang/Basic/OffloadArch.h"
2
3
#include "llvm/ADT/STLExtras.h"
4
#include "llvm/ADT/StringRef.h"
5
6
namespace clang {
7
8
namespace {
9
struct OffloadArchToStringMap {
10
OffloadArch Arch;
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"}
18
static 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(120), // Blackwell
37
SM(120a), // Blackwell
38
GFX(600), // gfx600
39
GFX(601), // gfx601
40
GFX(602), // gfx602
41
GFX(700), // gfx700
42
GFX(701), // gfx701
43
GFX(702), // gfx702
44
GFX(703), // gfx703
45
GFX(704), // gfx704
46
GFX(705), // gfx705
47
GFX(801), // gfx801
48
GFX(802), // gfx802
49
GFX(803), // gfx803
50
GFX(805), // gfx805
51
GFX(810), // gfx810
52
{OffloadArch::GFX9_GENERIC, "gfx9-generic", "compute_amdgcn"},
53
GFX(900), // gfx900
54
GFX(902), // gfx902
55
GFX(904), // gfx903
56
GFX(906), // gfx906
57
GFX(908), // gfx908
58
GFX(909), // gfx909
59
GFX(90a), // gfx90a
60
GFX(90c), // gfx90c
61
{OffloadArch::GFX9_4_GENERIC, "gfx9-4-generic", "compute_amdgcn"},
62
GFX(942), // gfx942
63
GFX(950), // gfx950
64
{OffloadArch::GFX10_1_GENERIC, "gfx10-1-generic", "compute_amdgcn"},
65
GFX(1010), // gfx1010
66
GFX(1011), // gfx1011
67
GFX(1012), // gfx1012
68
GFX(1013), // gfx1013
69
{OffloadArch::GFX10_3_GENERIC, "gfx10-3-generic", "compute_amdgcn"},
70
GFX(1030), // gfx1030
71
GFX(1031), // gfx1031
72
GFX(1032), // gfx1032
73
GFX(1033), // gfx1033
74
GFX(1034), // gfx1034
75
GFX(1035), // gfx1035
76
GFX(1036), // gfx1036
77
{OffloadArch::GFX11_GENERIC, "gfx11-generic", "compute_amdgcn"},
78
GFX(1100), // gfx1100
79
GFX(1101), // gfx1101
80
GFX(1102), // gfx1102
81
GFX(1103), // gfx1103
82
GFX(1150), // gfx1150
83
GFX(1151), // gfx1151
84
GFX(1152), // gfx1152
85
GFX(1153), // gfx1153
86
{OffloadArch::GFX12_GENERIC, "gfx12-generic", "compute_amdgcn"},
87
GFX(1200), // gfx1200
88
GFX(1201), // gfx1201
89
GFX(1250), // gfx1250
90
{OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},
91
// Intel CPUs
92
{OffloadArch::GRANITERAPIDS, "graniterapids", ""},
93
// Intel GPUS
94
{OffloadArch::BMG_G21, "bmg_g21", ""},
95
{OffloadArch::Generic, "generic", ""},
96
// clang-format on
97
};
98
#undef SM
99
#undef GFX
100
101
const char *OffloadArchToString(OffloadArch A) {
102
auto Result =
103
llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {
104
return A == Map.Arch;
105
});
106
if (Result == std::end(ArchNames))
107
return "unknown";
108
return Result->ArchName;
109
}
110
111
const char *OffloadArchToVirtualArchString(OffloadArch A) {
112
auto Result =
113
llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {
114
return A == Map.Arch;
115
});
116
if (Result == std::end(ArchNames))
117
return "unknown";
118
return Result->VirtualArchName;
119
}
120
121
OffloadArch StringToOffloadArch(llvm::StringRef S) {
122
auto Result =
123
llvm::find_if(ArchNames, [S](const OffloadArchToStringMap &Map) {
124
return S == Map.ArchName;
125
});
126
if (Result == std::end(ArchNames))
127
return OffloadArch::UNKNOWN;
128
return Result->Arch;
129
}
130
131
} // namespace clang
132
133