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