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 llvm::AMDGPU::GPUKind AK = llvm::AMDGPU::getGPUKindFromSubArch(SubArch);
93 if (AK == llvm::AMDGPU::GK_NONE)
100 return llvm::Triple::NoSubArch;
101 return llvm::AMDGPU::getSubArch(ID.amdgpuKind());
106 if (ID.isAMDGCNSPIRV())
107 return llvm::Triple(llvm::Triple::spirv64, llvm::Triple::NoSubArch,
108 llvm::Triple::AMD, llvm::Triple::AMDHSA);
111 llvm::Triple::ArchType
Arch = DefaultToolchainTriple.isArch64Bit()
112 ? llvm::Triple::nvptx64
113 : llvm::Triple::nvptx;
114 return llvm::Triple(
Arch, llvm::Triple::NoSubArch, llvm::Triple::NVIDIA,
119 return llvm::Triple(llvm::Triple::amdgpu, llvm::Triple::NoSubArch,
120 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)