10#include "llvm/ADT/SmallVector.h"
11#include "llvm/ADT/StringRef.h"
12#include "llvm/TargetParser/AMDGPUTargetParser.h"
13#include "llvm/TargetParser/NVPTXTargetParser.h"
14#include "llvm/TargetParser/Triple.h"
19 return getNVPTX(llvm::NVPTX::parseArch(
"sm_52"));
23 return getAMDGPU(llvm::AMDGPU::parseArchAMDGCN(
"gfx906"));
33 return llvm::NVPTX::getArchName(A.
nvptxKind()).data();
35 return llvm::AMDGPU::getArchNameAMDGCN(A.
amdgpuKind()).data();
39 return "graniterapids";
51 return llvm::NVPTX::getVirtualArch(A.
nvptxKind()).data();
54 return "compute_amdgcn";
72 if (S ==
"amdgcnspirv")
76 if (S ==
"graniterapids")
84 if (llvm::NVPTX::GPUKind NV = llvm::NVPTX::parseArch(S))
86 if (llvm::AMDGPU::GPUKind AK = llvm::AMDGPU::parseArchAMDGCN(S))
92#define NVPTX_GPU(NAME, KIND, VIRTUAL, SM_ID, MIN_VER, MAX_VER, SUFFIX) \
93 Values.push_back(NAME);
94#include "llvm/TargetParser/NVPTXTargetParser.def"
95 llvm::AMDGPU::fillValidArchListAMDGCN(Values, llvm::Triple::NoSubArch);
99 llvm::AMDGPU::GPUKind AK = llvm::AMDGPU::getGPUKindFromSubArch(SubArch);
100 if (AK == llvm::AMDGPU::GK_NONE)
107 return llvm::Triple::NoSubArch;
108 return llvm::AMDGPU::getSubArch(ID.amdgpuKind());
113 if (ID.isAMDGCNSPIRV())
114 return llvm::Triple(llvm::Triple::spirv64, llvm::Triple::NoSubArch,
115 llvm::Triple::AMD, llvm::Triple::AMDHSA);
118 llvm::Triple::ArchType
Arch = DefaultToolchainTriple.isArch64Bit()
119 ? llvm::Triple::nvptx64
120 : llvm::Triple::nvptx;
121 return llvm::Triple(
Arch, llvm::Triple::NoSubArch, llvm::Triple::NVIDIA,
126 return llvm::Triple(llvm::Triple::amdgpu, llvm::Triple::NoSubArch,
127 llvm::Triple::AMD, llvm::Triple::AMDHSA);
A processor an offloading action can target.
static constexpr OffloadArch getUnused()
static constexpr OffloadArch getAMDGCNSPIRV()
static constexpr OffloadArch getGeneric()
static OffloadArch CudaDefault()
Default architectures used when the user does not specify one.
static OffloadArch getNVPTX(llvm::NVPTX::GPUKind K)
static OffloadArch HIPDefault()
static constexpr OffloadArch getUnknown()
static constexpr OffloadArch getIntel(TargetArch V, IntelArch A)
llvm::NVPTX::GPUKind nvptxKind() const
llvm::AMDGPU::GPUKind amdgpuKind() const
TargetArch targetArch() const
static OffloadArch getAMDGPU(llvm::AMDGPU::GPUKind K)
Top level wrappers for InstallAPI frontend operations.
llvm::Triple::SubArchType getOffloadArchSubArch(OffloadArch ID)
OffloadArch getSubArchOffloadArch(llvm::Triple::SubArchType SubArch)
const char * OffloadArchToVirtualArchString(OffloadArch A)
OffloadArch StringToOffloadArch(llvm::StringRef S)
const char * OffloadArchToString(OffloadArch A)
llvm::Triple OffloadArchToTriple(const llvm::Triple &DefaultToolchainTriple, OffloadArch ID)
void fillValidOffloadArchList(llvm::SmallVectorImpl< llvm::StringRef > &Values)
Append the canonical names of all NVIDIA and AMDGPU GPUs.