3#include "llvm/ADT/Twine.h"
4#include "llvm/Support/ErrorHandling.h"
5#include "llvm/Support/VersionTuple.h"
6#include "llvm/TargetParser/NVPTXTargetParser.h"
16#define CUDA_ENTRY(major, minor) \
18 #major "." #minor, CudaVersion::CUDA_##major##minor, \
19 llvm::VersionTuple(major, minor) \
69 std::string VS = S.str();
78 if (I->TVersion == Version)
92#define NVPTX_GPU(NAME, KIND, VIRTUAL, SM_ID, MIN_VER, MAX_VER, SUFFIX) \
93 case llvm::NVPTX::GK_##KIND: \
94 return CudaVersion::MIN_VER;
95#include "llvm/TargetParser/NVPTXTargetParser.def"
97 llvm_unreachable(
"invalid enum");
110#define NVPTX_GPU(NAME, KIND, VIRTUAL, SM_ID, MIN_VER, MAX_VER, SUFFIX) \
111 case llvm::NVPTX::GK_##KIND: \
112 return CudaVersion::MAX_VER;
113#include "llvm/TargetParser/NVPTXTargetParser.def"
130 llvm_unreachable(
"Unknown CUDA feature.");
134 assert(
Arch.isNVPTX() &&
"invalid NVIDIA GPU architecture");
135 return llvm::NVPTX::getSmVersion(
Arch.nvptxKind());
139 return Arch.isNVPTX() && llvm::NVPTX::isAcceleratedArch(
Arch.nvptxKind());
143 return Arch.isNVPTX() && llvm::NVPTX::isFamilySpecificArch(
Arch.nvptxKind());
#define CUDA_ENTRY(major, minor)
A processor an offloading action can target.
llvm::NVPTX::GPUKind nvptxKind() const
Top level wrappers for InstallAPI frontend operations.
CudaVersion MaxVersionForOffloadArch(OffloadArch A)
Get the latest CudaVersion that supports the given OffloadArch.
unsigned CudaArchToID(OffloadArch Arch)
Get the numeric ID (e.g. 700) of a CUDA architecture.
CudaVersion ToCudaVersion(llvm::VersionTuple)
CudaVersion CudaStringToVersion(const llvm::Twine &S)
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
const char * CudaVersionToString(CudaVersion V)
bool IsNVIDIAAcceleratedOffloadArch(OffloadArch Arch)
Check if the CUDA architecture is an accelerated variant (e.g. sm_90a).
static const CudaVersionMapEntry CudaNameVersionMap[]
@ CUDA_USES_FATBIN_REGISTER_END
CudaVersion MinVersionForOffloadArch(OffloadArch A)
Get the earliest CudaVersion that supports the given OffloadArch.
bool IsNVIDIAFamilySpecificOffloadArch(OffloadArch Arch)
Check if the CUDA architecture is a family-specific variant (e.g. sm_100f).
llvm::VersionTuple TVersion