clang  14.0.0git
AMDGPU.cpp
Go to the documentation of this file.
1 //===--- AMDGPU.cpp - Implement AMDGPU target feature support -------------===//
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 // This file implements AMDGPU TargetInfo objects.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "AMDGPU.h"
14 #include "clang/Basic/Builtins.h"
19 #include "llvm/ADT/StringSwitch.h"
20 
21 using namespace clang;
22 using namespace clang::targets;
23 
24 namespace clang {
25 namespace targets {
26 
27 // If you edit the description strings, make sure you update
28 // getPointerWidthV().
29 
30 static const char *const DataLayoutStringR600 =
31  "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128"
32  "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1";
33 
34 static const char *const DataLayoutStringAMDGCN =
35  "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32"
36  "-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128"
37  "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1"
38  "-ni:7";
39 
40 const LangASMap AMDGPUTargetInfo::AMDGPUDefIsGenMap = {
41  Generic, // Default
42  Global, // opencl_global
43  Local, // opencl_local
44  Constant, // opencl_constant
45  Private, // opencl_private
46  Generic, // opencl_generic
47  Global, // opencl_global_device
48  Global, // opencl_global_host
49  Global, // cuda_device
50  Constant, // cuda_constant
51  Local, // cuda_shared
52  Global, // sycl_global
53  Global, // sycl_global_device
54  Global, // sycl_global_host
55  Local, // sycl_local
56  Private, // sycl_private
57  Generic, // ptr32_sptr
58  Generic, // ptr32_uptr
59  Generic // ptr64
60 };
61 
62 const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = {
63  Private, // Default
64  Global, // opencl_global
65  Local, // opencl_local
66  Constant, // opencl_constant
67  Private, // opencl_private
68  Generic, // opencl_generic
69  Global, // opencl_global_device
70  Global, // opencl_global_host
71  Global, // cuda_device
72  Constant, // cuda_constant
73  Local, // cuda_shared
74  // SYCL address space values for this map are dummy
75  Generic, // sycl_global
76  Generic, // sycl_global_device
77  Generic, // sycl_global_host
78  Generic, // sycl_local
79  Generic, // sycl_private
80  Generic, // ptr32_sptr
81  Generic, // ptr32_uptr
82  Generic // ptr64
83 
84 };
85 } // namespace targets
86 } // namespace clang
87 
88 const Builtin::Info AMDGPUTargetInfo::BuiltinInfo[] = {
89 #define BUILTIN(ID, TYPE, ATTRS) \
90  {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, nullptr},
91 #define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \
92  {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE},
93 #include "clang/Basic/BuiltinsAMDGPU.def"
94 };
95 
96 const char *const AMDGPUTargetInfo::GCCRegNames[] = {
97  "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8",
98  "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17",
99  "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26",
100  "v27", "v28", "v29", "v30", "v31", "v32", "v33", "v34", "v35",
101  "v36", "v37", "v38", "v39", "v40", "v41", "v42", "v43", "v44",
102  "v45", "v46", "v47", "v48", "v49", "v50", "v51", "v52", "v53",
103  "v54", "v55", "v56", "v57", "v58", "v59", "v60", "v61", "v62",
104  "v63", "v64", "v65", "v66", "v67", "v68", "v69", "v70", "v71",
105  "v72", "v73", "v74", "v75", "v76", "v77", "v78", "v79", "v80",
106  "v81", "v82", "v83", "v84", "v85", "v86", "v87", "v88", "v89",
107  "v90", "v91", "v92", "v93", "v94", "v95", "v96", "v97", "v98",
108  "v99", "v100", "v101", "v102", "v103", "v104", "v105", "v106", "v107",
109  "v108", "v109", "v110", "v111", "v112", "v113", "v114", "v115", "v116",
110  "v117", "v118", "v119", "v120", "v121", "v122", "v123", "v124", "v125",
111  "v126", "v127", "v128", "v129", "v130", "v131", "v132", "v133", "v134",
112  "v135", "v136", "v137", "v138", "v139", "v140", "v141", "v142", "v143",
113  "v144", "v145", "v146", "v147", "v148", "v149", "v150", "v151", "v152",
114  "v153", "v154", "v155", "v156", "v157", "v158", "v159", "v160", "v161",
115  "v162", "v163", "v164", "v165", "v166", "v167", "v168", "v169", "v170",
116  "v171", "v172", "v173", "v174", "v175", "v176", "v177", "v178", "v179",
117  "v180", "v181", "v182", "v183", "v184", "v185", "v186", "v187", "v188",
118  "v189", "v190", "v191", "v192", "v193", "v194", "v195", "v196", "v197",
119  "v198", "v199", "v200", "v201", "v202", "v203", "v204", "v205", "v206",
120  "v207", "v208", "v209", "v210", "v211", "v212", "v213", "v214", "v215",
121  "v216", "v217", "v218", "v219", "v220", "v221", "v222", "v223", "v224",
122  "v225", "v226", "v227", "v228", "v229", "v230", "v231", "v232", "v233",
123  "v234", "v235", "v236", "v237", "v238", "v239", "v240", "v241", "v242",
124  "v243", "v244", "v245", "v246", "v247", "v248", "v249", "v250", "v251",
125  "v252", "v253", "v254", "v255", "s0", "s1", "s2", "s3", "s4",
126  "s5", "s6", "s7", "s8", "s9", "s10", "s11", "s12", "s13",
127  "s14", "s15", "s16", "s17", "s18", "s19", "s20", "s21", "s22",
128  "s23", "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
129  "s32", "s33", "s34", "s35", "s36", "s37", "s38", "s39", "s40",
130  "s41", "s42", "s43", "s44", "s45", "s46", "s47", "s48", "s49",
131  "s50", "s51", "s52", "s53", "s54", "s55", "s56", "s57", "s58",
132  "s59", "s60", "s61", "s62", "s63", "s64", "s65", "s66", "s67",
133  "s68", "s69", "s70", "s71", "s72", "s73", "s74", "s75", "s76",
134  "s77", "s78", "s79", "s80", "s81", "s82", "s83", "s84", "s85",
135  "s86", "s87", "s88", "s89", "s90", "s91", "s92", "s93", "s94",
136  "s95", "s96", "s97", "s98", "s99", "s100", "s101", "s102", "s103",
137  "s104", "s105", "s106", "s107", "s108", "s109", "s110", "s111", "s112",
138  "s113", "s114", "s115", "s116", "s117", "s118", "s119", "s120", "s121",
139  "s122", "s123", "s124", "s125", "s126", "s127", "exec", "vcc", "scc",
140  "m0", "flat_scratch", "exec_lo", "exec_hi", "vcc_lo", "vcc_hi",
141  "flat_scratch_lo", "flat_scratch_hi",
142  "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8",
143  "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16", "a17",
144  "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26",
145  "a27", "a28", "a29", "a30", "a31", "a32", "a33", "a34", "a35",
146  "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44",
147  "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53",
148  "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62",
149  "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71",
150  "a72", "a73", "a74", "a75", "a76", "a77", "a78", "a79", "a80",
151  "a81", "a82", "a83", "a84", "a85", "a86", "a87", "a88", "a89",
152  "a90", "a91", "a92", "a93", "a94", "a95", "a96", "a97", "a98",
153  "a99", "a100", "a101", "a102", "a103", "a104", "a105", "a106", "a107",
154  "a108", "a109", "a110", "a111", "a112", "a113", "a114", "a115", "a116",
155  "a117", "a118", "a119", "a120", "a121", "a122", "a123", "a124", "a125",
156  "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134",
157  "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143",
158  "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152",
159  "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161",
160  "a162", "a163", "a164", "a165", "a166", "a167", "a168", "a169", "a170",
161  "a171", "a172", "a173", "a174", "a175", "a176", "a177", "a178", "a179",
162  "a180", "a181", "a182", "a183", "a184", "a185", "a186", "a187", "a188",
163  "a189", "a190", "a191", "a192", "a193", "a194", "a195", "a196", "a197",
164  "a198", "a199", "a200", "a201", "a202", "a203", "a204", "a205", "a206",
165  "a207", "a208", "a209", "a210", "a211", "a212", "a213", "a214", "a215",
166  "a216", "a217", "a218", "a219", "a220", "a221", "a222", "a223", "a224",
167  "a225", "a226", "a227", "a228", "a229", "a230", "a231", "a232", "a233",
168  "a234", "a235", "a236", "a237", "a238", "a239", "a240", "a241", "a242",
169  "a243", "a244", "a245", "a246", "a247", "a248", "a249", "a250", "a251",
170  "a252", "a253", "a254", "a255"
171 };
172 
174  return llvm::makeArrayRef(GCCRegNames);
175 }
176 
178  llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU,
179  const std::vector<std::string> &FeatureVec) const {
180 
181  using namespace llvm::AMDGPU;
182 
183  // XXX - What does the member GPU mean if device name string passed here?
184  if (isAMDGCN(getTriple())) {
185  switch (llvm::AMDGPU::parseArchAMDGCN(CPU)) {
186  case GK_GFX1035:
187  case GK_GFX1034:
188  case GK_GFX1033:
189  case GK_GFX1032:
190  case GK_GFX1031:
191  case GK_GFX1030:
192  Features["ci-insts"] = true;
193  Features["dot1-insts"] = true;
194  Features["dot2-insts"] = true;
195  Features["dot5-insts"] = true;
196  Features["dot6-insts"] = true;
197  Features["dot7-insts"] = true;
198  Features["dl-insts"] = true;
199  Features["flat-address-space"] = true;
200  Features["16-bit-insts"] = true;
201  Features["dpp"] = true;
202  Features["gfx8-insts"] = true;
203  Features["gfx9-insts"] = true;
204  Features["gfx10-insts"] = true;
205  Features["gfx10-3-insts"] = true;
206  Features["s-memrealtime"] = true;
207  Features["s-memtime-inst"] = true;
208  break;
209  case GK_GFX1012:
210  case GK_GFX1011:
211  Features["dot1-insts"] = true;
212  Features["dot2-insts"] = true;
213  Features["dot5-insts"] = true;
214  Features["dot6-insts"] = true;
215  Features["dot7-insts"] = true;
216  LLVM_FALLTHROUGH;
217  case GK_GFX1013:
218  case GK_GFX1010:
219  Features["dl-insts"] = true;
220  Features["ci-insts"] = true;
221  Features["flat-address-space"] = true;
222  Features["16-bit-insts"] = true;
223  Features["dpp"] = true;
224  Features["gfx8-insts"] = true;
225  Features["gfx9-insts"] = true;
226  Features["gfx10-insts"] = true;
227  Features["s-memrealtime"] = true;
228  Features["s-memtime-inst"] = true;
229  break;
230  case GK_GFX90A:
231  Features["gfx90a-insts"] = true;
232  LLVM_FALLTHROUGH;
233  case GK_GFX908:
234  Features["dot3-insts"] = true;
235  Features["dot4-insts"] = true;
236  Features["dot5-insts"] = true;
237  Features["dot6-insts"] = true;
238  Features["mai-insts"] = true;
239  LLVM_FALLTHROUGH;
240  case GK_GFX906:
241  Features["dl-insts"] = true;
242  Features["dot1-insts"] = true;
243  Features["dot2-insts"] = true;
244  Features["dot7-insts"] = true;
245  LLVM_FALLTHROUGH;
246  case GK_GFX90C:
247  case GK_GFX909:
248  case GK_GFX904:
249  case GK_GFX902:
250  case GK_GFX900:
251  Features["gfx9-insts"] = true;
252  LLVM_FALLTHROUGH;
253  case GK_GFX810:
254  case GK_GFX805:
255  case GK_GFX803:
256  case GK_GFX802:
257  case GK_GFX801:
258  Features["gfx8-insts"] = true;
259  Features["16-bit-insts"] = true;
260  Features["dpp"] = true;
261  Features["s-memrealtime"] = true;
262  LLVM_FALLTHROUGH;
263  case GK_GFX705:
264  case GK_GFX704:
265  case GK_GFX703:
266  case GK_GFX702:
267  case GK_GFX701:
268  case GK_GFX700:
269  Features["ci-insts"] = true;
270  Features["flat-address-space"] = true;
271  LLVM_FALLTHROUGH;
272  case GK_GFX602:
273  case GK_GFX601:
274  case GK_GFX600:
275  Features["s-memtime-inst"] = true;
276  break;
277  case GK_NONE:
278  break;
279  default:
280  llvm_unreachable("Unhandled GPU!");
281  }
282  } else {
283  if (CPU.empty())
284  CPU = "r600";
285 
286  switch (llvm::AMDGPU::parseArchR600(CPU)) {
287  case GK_CAYMAN:
288  case GK_CYPRESS:
289  case GK_RV770:
290  case GK_RV670:
291  // TODO: Add fp64 when implemented.
292  break;
293  case GK_TURKS:
294  case GK_CAICOS:
295  case GK_BARTS:
296  case GK_SUMO:
297  case GK_REDWOOD:
298  case GK_JUNIPER:
299  case GK_CEDAR:
300  case GK_RV730:
301  case GK_RV710:
302  case GK_RS880:
303  case GK_R630:
304  case GK_R600:
305  break;
306  default:
307  llvm_unreachable("Unhandled GPU!");
308  }
309  }
310 
311  return TargetInfo::initFeatureMap(Features, Diags, CPU, FeatureVec);
312 }
313 
315  SmallVectorImpl<StringRef> &Values) const {
316  if (isAMDGCN(getTriple()))
317  llvm::AMDGPU::fillValidArchListAMDGCN(Values);
318  else
319  llvm::AMDGPU::fillValidArchListR600(Values);
320 }
321 
322 void AMDGPUTargetInfo::setAddressSpaceMap(bool DefaultIsPrivate) {
323  AddrSpaceMap = DefaultIsPrivate ? &AMDGPUDefIsPrivMap : &AMDGPUDefIsGenMap;
324 }
325 
326 AMDGPUTargetInfo::AMDGPUTargetInfo(const llvm::Triple &Triple,
327  const TargetOptions &Opts)
328  : TargetInfo(Triple),
329  GPUKind(isAMDGCN(Triple) ?
330  llvm::AMDGPU::parseArchAMDGCN(Opts.CPU) :
331  llvm::AMDGPU::parseArchR600(Opts.CPU)),
332  GPUFeatures(isAMDGCN(Triple) ?
333  llvm::AMDGPU::getArchAttrAMDGCN(GPUKind) :
334  llvm::AMDGPU::getArchAttrR600(GPUKind)) {
337 
338  setAddressSpaceMap(Triple.getOS() == llvm::Triple::Mesa3D ||
339  !isAMDGCN(Triple));
341 
342  HasLegalHalfType = true;
343  HasFloat16 = true;
344  WavefrontSize = GPUFeatures & llvm::AMDGPU::FEATURE_WAVE32 ? 32 : 64;
346 
347  // Set pointer width and alignment for target address space 0.
349  if (getMaxPointerWidth() == 64) {
350  LongWidth = LongAlign = 64;
354  }
355 
357 }
358 
360  TargetInfo::adjust(Diags, Opts);
361  // ToDo: There are still a few places using default address space as private
362  // address space in OpenCL, which needs to be cleaned up, then Opts.OpenCL
363  // can be removed from the following line.
364  setAddressSpaceMap(/*DefaultIsPrivate=*/Opts.OpenCL ||
365  !isAMDGCN(getTriple()));
366 }
367 
369  return llvm::makeArrayRef(BuiltinInfo, clang::AMDGPU::LastTSBuiltin -
371 }
372 
374  MacroBuilder &Builder) const {
375  Builder.defineMacro("__AMD__");
376  Builder.defineMacro("__AMDGPU__");
377 
378  if (isAMDGCN(getTriple()))
379  Builder.defineMacro("__AMDGCN__");
380  else
381  Builder.defineMacro("__R600__");
382 
383  if (GPUKind != llvm::AMDGPU::GK_NONE) {
384  StringRef CanonName = isAMDGCN(getTriple()) ?
385  getArchNameAMDGCN(GPUKind) : getArchNameR600(GPUKind);
386  Builder.defineMacro(Twine("__") + Twine(CanonName) + Twine("__"));
387  if (isAMDGCN(getTriple())) {
388  Builder.defineMacro("__amdgcn_processor__",
389  Twine("\"") + Twine(CanonName) + Twine("\""));
390  Builder.defineMacro("__amdgcn_target_id__",
391  Twine("\"") + Twine(getTargetID().getValue()) +
392  Twine("\""));
393  for (auto F : getAllPossibleTargetIDFeatures(getTriple(), CanonName)) {
394  auto Loc = OffloadArchFeatures.find(F);
395  if (Loc != OffloadArchFeatures.end()) {
396  std::string NewF = F.str();
397  std::replace(NewF.begin(), NewF.end(), '-', '_');
398  Builder.defineMacro(Twine("__amdgcn_feature_") + Twine(NewF) +
399  Twine("__"),
400  Loc->second ? "1" : "0");
401  }
402  }
403  }
404  }
405 
406  // TODO: __HAS_FMAF__, __HAS_LDEXPF__, __HAS_FP64__ are deprecated and will be
407  // removed in the near future.
408  if (hasFMAF())
409  Builder.defineMacro("__HAS_FMAF__");
410  if (hasFastFMAF())
411  Builder.defineMacro("FP_FAST_FMAF");
412  if (hasLDEXPF())
413  Builder.defineMacro("__HAS_LDEXPF__");
414  if (hasFP64())
415  Builder.defineMacro("__HAS_FP64__");
416  if (hasFastFMA())
417  Builder.defineMacro("FP_FAST_FMA");
418 
419  Builder.defineMacro("__AMDGCN_WAVEFRONT_SIZE", Twine(WavefrontSize));
420 }
421 
423  assert(HalfFormat == Aux->HalfFormat);
424  assert(FloatFormat == Aux->FloatFormat);
425  assert(DoubleFormat == Aux->DoubleFormat);
426 
427  // On x86_64 long double is 80-bit extended precision format, which is
428  // not supported by AMDGPU. 128-bit floating point format is also not
429  // supported by AMDGPU. Therefore keep its own format for these two types.
430  auto SaveLongDoubleFormat = LongDoubleFormat;
431  auto SaveFloat128Format = Float128Format;
432  copyAuxTarget(Aux);
433  LongDoubleFormat = SaveLongDoubleFormat;
434  Float128Format = SaveFloat128Format;
435  // For certain builtin types support on the host target, claim they are
436  // support to pass the compilation of the host code during the device-side
437  // compilation.
438  // FIXME: As the side effect, we also accept `__float128` uses in the device
439  // code. To rejct these builtin types supported in the host target but not in
440  // the device target, one approach would support `device_builtin` attribute
441  // so that we could tell the device builtin types from the host ones. The
442  // also solves the different representations of the same builtin type, such
443  // as `size_t` in the MSVC environment.
444  if (Aux->hasFloat128Type()) {
445  HasFloat128 = true;
447  }
448 }
clang::TransferrableTargetInfo::PointerAlign
unsigned char PointerAlign
Definition: TargetInfo.h:69
clang::TransferrableTargetInfo::LongWidth
unsigned char LongWidth
Definition: TargetInfo.h:78
Builtins.h
llvm
Definition: Dominators.h:30
clang::TransferrableTargetInfo::IntPtrType
IntType IntPtrType
Definition: TargetInfo.h:134
clang::targets::DataLayoutStringAMDGCN
static const char *const DataLayoutStringAMDGCN
Definition: AMDGPU.cpp:34
clang::targets::AMDGPUTargetInfo::getTargetBuiltins
ArrayRef< Builtin::Info > getTargetBuiltins() const override
Return information about target-specific builtins for the current primary target, and info about whic...
Definition: AMDGPU.cpp:368
string
string(SUBSTRING ${CMAKE_CURRENT_BINARY_DIR} 0 ${PATH_LIB_START} PATH_HEAD) string(SUBSTRING $
Definition: CMakeLists.txt:22
clang::targets::AMDGPUTargetInfo::setAddressSpaceMap
void setAddressSpaceMap(bool DefaultIsPrivate)
Definition: AMDGPU.cpp:322
clang::targets::AMDGPUTargetInfo::fillValidCPUList
void fillValidCPUList(SmallVectorImpl< StringRef > &Values) const override
Fill a SmallVectorImpl with the valid values to setCPU.
Definition: AMDGPU.cpp:314
clang::DiagnosticsEngine
Concrete class used by the front-end to report problems and issues.
Definition: Diagnostic.h:191
clang::TargetInfo
Exposes information about the current target.
Definition: TargetInfo.h:189
clang::TargetInfo::adjust
virtual void adjust(DiagnosticsEngine &Diags, LangOptions &Opts)
Set forced language options.
Definition: TargetInfo.cpp:353
clang::targets::AMDGPUTargetInfo::getGCCRegNames
ArrayRef< const char * > getGCCRegNames() const override
Definition: AMDGPU.cpp:173
clang::TargetInfo::UseAddrSpaceMapMangling
bool UseAddrSpaceMapMangling
Specify if mangling based on address space map should be used or not for language specific address sp...
Definition: TargetInfo.h:314
clang::TransferrableTargetInfo::LongAlign
unsigned char LongAlign
Definition: TargetInfo.h:78
clang::TargetInfo::AllowAMDGPUUnsafeFPAtomics
unsigned AllowAMDGPUUnsafeFPAtomics
Definition: TargetInfo.h:232
clang::TargetInfo::MaxAtomicPromoteWidth
unsigned char MaxAtomicPromoteWidth
Definition: TargetInfo.h:208
clang::TransferrableTargetInfo::FloatFormat
const llvm::fltSemantics * FloatFormat
Definition: TargetInfo.h:115
getValue
static SVal getValue(SVal val, SValBuilder &svalBuilder)
Definition: ArrayBoundCheckerV2.cpp:277
clang::TargetInfo::HasLegalHalfType
bool HasLegalHalfType
Definition: TargetInfo.h:200
CodeGenOptions.h
clang::TransferrableTargetInfo::Float128Format
const llvm::fltSemantics * Float128Format
Definition: TargetInfo.h:116
clang::LangASMap
unsigned[(unsigned) LangAS::FirstTargetAddressSpace] LangASMap
The type of a lookup table which maps from language-specific address spaces to target-specific ones.
Definition: AddressSpaces.h:67
clang::TargetOptions::AllowAMDGPUUnsafeFPAtomics
bool AllowAMDGPUUnsafeFPAtomics
If enabled, allow AMDGPU unsafe floating point atomics.
Definition: TargetOptions.h:79
clang::targets::AMDGPUTargetInfo::AMDGPUTargetInfo
AMDGPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: AMDGPU.cpp:326
LangOptions.h
clang::TargetInfo::initFeatureMap
virtual bool initFeatureMap(llvm::StringMap< bool > &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector< std::string > &FeatureVec) const
Initialize the map with the default set of target features for the CPU this should include all legal ...
Definition: TargetInfo.cpp:461
MacroBuilder.h
clang::targets::AMDGPUTargetInfo::setAuxTarget
void setAuxTarget(const TargetInfo *Aux) override
Definition: AMDGPU.cpp:422
clang::TargetInfo::hasFloat128Type
virtual bool hasFloat128Type() const
Determine whether the __float128 type is supported on this target.
Definition: TargetInfo.h:593
clang::TargetInfo::resetDataLayout
void resetDataLayout(StringRef DL, const char *UserLabelPrefix="")
Definition: TargetInfo.cpp:156
clang::TargetInfo::HasFloat128
bool HasFloat128
Definition: TargetInfo.h:202
clang::TargetInfo::getTriple
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
Definition: TargetInfo.h:1130
clang::getAllPossibleTargetIDFeatures
const llvm::SmallVector< llvm::StringRef, 4 > getAllPossibleTargetIDFeatures(const llvm::Triple &T, llvm::StringRef Processor)
Get all feature strings that can be used in target ID for Processor.
Definition: TargetID.cpp:37
clang::TransferrableTargetInfo::PtrDiffType
IntType PtrDiffType
Definition: TargetInfo.h:134
clang::targets::AMDGPUTargetInfo::getTargetID
Optional< std::string > getTargetID() const override
Returns the target ID if supported.
Definition: AMDGPU.h:451
clang::TargetInfo::AddrSpaceMap
const LangASMap * AddrSpaceMap
Definition: TargetInfo.h:215
clang::targets::AMDGPUTargetInfo::getMaxPointerWidth
uint64_t getMaxPointerWidth() const override
Return the maximum width of pointers on this target.
Definition: AMDGPU.h:112
llvm::ArrayRef< const char * >
clang::TransferrableTargetInfo::LongDoubleFormat
const llvm::fltSemantics * LongDoubleFormat
Definition: TargetInfo.h:116
clang::TransferrableTargetInfo::DoubleFormat
const llvm::fltSemantics * DoubleFormat
Definition: TargetInfo.h:116
clang::TargetInfo::MaxAtomicInlineWidth
unsigned char MaxAtomicInlineWidth
Definition: TargetInfo.h:208
TargetBuiltins.h
clang::targets::AMDGPUTargetInfo::initFeatureMap
bool initFeatureMap(llvm::StringMap< bool > &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector< std::string > &FeatureVec) const override
Initialize the map with the default set of target features for the CPU this should include all legal ...
Definition: AMDGPU.cpp:177
clang::LangOptions
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:58
AMDGPU.h
clang::targets::AMDGPUTargetInfo::adjust
void adjust(DiagnosticsEngine &Diags, LangOptions &Opts) override
Set forced language options.
Definition: AMDGPU.cpp:359
clang::TransferrableTargetInfo::HalfFormat
const llvm::fltSemantics * HalfFormat
Definition: TargetInfo.h:115
clang::TargetInfo::HasFloat16
bool HasFloat16
Definition: TargetInfo.h:203
clang
Definition: CalledOnceCheck.h:17
clang::targets
Definition: AArch64.h:21
clang::Builtin::Info
Definition: Builtins.h:55
clang::TransferrableTargetInfo::UnsignedLong
@ UnsignedLong
Definition: TargetInfo.h:128
clang::Builtin::FirstTSBuiltin
@ FirstTSBuiltin
Definition: Builtins.h:52
clang::AMDGPU::LastTSBuiltin
@ LastTSBuiltin
Definition: TargetBuiltins.h:104
clang::TargetOptions
Options for controlling the target.
Definition: TargetOptions.h:26
llvm::SmallVectorImpl
Definition: LLVM.h:39
clang::TransferrableTargetInfo::PointerWidth
unsigned char PointerWidth
Definition: TargetInfo.h:69
clang::targets::AMDGPUTargetInfo::getPointerWidthV
uint64_t getPointerWidthV(unsigned AddrSpace) const override
Definition: AMDGPU.h:98
clang::MacroBuilder
Definition: MacroBuilder.h:23
clang::targets::AMDGPUTargetInfo::getTargetDefines
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
Definition: AMDGPU.cpp:373
clang::TargetInfo::copyAuxTarget
void copyAuxTarget(const TargetInfo *Aux)
Copy type and layout related info.
Definition: TargetInfo.cpp:876
clang::targets::DataLayoutStringR600
static const char *const DataLayoutStringR600
Definition: AMDGPU.cpp:30
clang::TransferrableTargetInfo::SizeType
IntType SizeType
Definition: TargetInfo.h:134
clang::TransferrableTargetInfo::SignedLong
@ SignedLong
Definition: TargetInfo.h:127