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) \
67 std::string VS = S.str();
76 if (I->TVersion == Version)
90#define NVPTX_GPU(NAME, KIND, VIRTUAL, SM_ID, MIN_VER, MAX_VER, SUFFIX) \
91 case llvm::NVPTX::GK_##KIND: \
92 return CudaVersion::MIN_VER;
93#include "llvm/TargetParser/NVPTXTargetParser.def"
95 llvm_unreachable(
"invalid enum");
108#define NVPTX_GPU(NAME, KIND, VIRTUAL, SM_ID, MIN_VER, MAX_VER, SUFFIX) \
109 case llvm::NVPTX::GK_##KIND: \
110 return CudaVersion::MAX_VER;
111#include "llvm/TargetParser/NVPTXTargetParser.def"
128 llvm_unreachable(
"Unknown CUDA feature.");
132 assert(
Arch.isNVPTX() &&
"invalid NVIDIA GPU architecture");
133 return llvm::NVPTX::getSmVersion(
Arch.nvptxKind());
137 return Arch.isNVPTX() && llvm::NVPTX::isAcceleratedArch(
Arch.nvptxKind());
141 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
The JSON file list parser is used to communicate input to InstallAPI.
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)
bool IsAMDOffloadArch(OffloadArch A)
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