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
12namespace llvm {
13class StringRef;
14} // namespace llvm
15
16namespace clang {
17
18enum 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 GFX1250,
102 AMDGCNSPIRV,
103 Generic, // A processor model named 'generic' if the target backend defines a
104 // public one.
105 // Intel CPUs
106 GRANITERAPIDS,
107 // Intel GPUs
108 BMG_G21,
109 LAST,
110
111 CudaDefault = OffloadArch::SM_52,
112 HIPDefault = OffloadArch::GFX906,
113};
114
115static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
116 return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
117}
118
119static inline bool IsAMDOffloadArch(OffloadArch A) {
120 // Generic processor model is for testing only.
121 return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
122}
123
124static inline bool IsIntelCPUOffloadArch(OffloadArch Arch) {
125 return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21;
126}
127
128static inline bool IsIntelGPUOffloadArch(OffloadArch Arch) {
129 return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST;
130}
131
132static inline bool IsIntelOffloadArch(OffloadArch Arch) {
133 return IsIntelCPUOffloadArch(Arch) || IsIntelGPUOffloadArch(Arch);
134}
135
136const char *OffloadArchToString(OffloadArch A);
137const char *OffloadArchToVirtualArchString(OffloadArch A);
138
139// Convert a string to an OffloadArch enum value. Returns
140// OffloadArch::UNKNOWN if the string is not recognized.
141OffloadArch StringToOffloadArch(llvm::StringRef S);
142
143} // namespace clang
144
145#endif // LLVM_CLANG_BASIC_OFFLOADARCH_H
146

source code of clang/include/clang/Basic/OffloadArch.h