18 #include "llvm/ADT/StringSwitch.h"
20 using namespace clang;
24 #define BUILTIN(ID, TYPE, ATTRS) \
25 {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, nullptr},
26 #define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) \
27 {#ID, TYPE, ATTRS, HEADER, ALL_LANGUAGES, nullptr},
28 #define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \
29 {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE},
30 #include "clang/Basic/BuiltinsNVPTX.def"
33 const char *
const NVPTXTargetInfo::GCCRegNames[] = {
"r0"};
37 unsigned TargetPointerWidth)
39 assert((TargetPointerWidth == 32 || TargetPointerWidth == 64) &&
40 "NVPTX only supports 32- and 64-bit modes.");
44 if (!Feature.startswith(
"+ptx"))
46 PTXVersion = llvm::StringSwitch<unsigned>(Feature)
77 if (TargetPointerWidth == 32)
81 "e-p3:32:32-p4:32:32-p5:32:32-i64:64-i128:128-v16:16-v32:32-n16:32:64");
88 if (!HostTriple.isNVPTX())
95 switch (TargetPointerWidth) {
107 llvm_unreachable(
"TargetPointerWidth must be 32 or 64");
117 IntWidth = HostTarget->getIntWidth();
118 IntAlign = HostTarget->getIntAlign();
130 NewAlign = HostTarget->getNewAlign();
132 HostTarget->getDefaultAlignForAttributeAligned();
133 SizeType = HostTarget->getSizeType();
138 WIntType = HostTarget->getWIntType();
169 return llvm::makeArrayRef(GCCRegNames);
173 return llvm::StringSwitch<bool>(Feature)
174 .Cases(
"ptx",
"nvptx",
true)
180 Builder.defineMacro(
"__PTX__");
181 Builder.defineMacro(
"__NVPTX__");
182 if (Opts.CUDAIsDevice || Opts.OpenMPIsDevice) {
229 assert(
false &&
"No GPU arch when compiling CUDA device code.");
266 llvm_unreachable(
"unhandled CudaArch");
268 Builder.defineMacro(
"__CUDA_ARCH__", CUDAArchCode);