10#include "llvm/ADT/SmallVector.h"
11#include "llvm/ADT/StringRef.h"
12#include "llvm/TargetParser/AMDGPUTargetParser.h"
13#include "llvm/TargetParser/IntelGPUTargetParser.h"
14#include "llvm/TargetParser/NVPTXTargetParser.h"
15#include "llvm/TargetParser/Triple.h"
21 return getNVPTX(llvm::NVPTX::parseArch(
"sm_52"));
25 return getAMDGPU(llvm::AMDGPU::parseArchAMDGCN(
"gfx906"));
29 assert(
T.isValid() &&
"T is not a valid IGCA target");
34 assert(
isIntelIGCA() &&
"cannot get IGCA target from a non-IGCA OffloadArch");
35 return llvm::IntelGPU::IGCATarget::unpack(Kind);
45 return llvm::NVPTX::getArchName(A.
nvptxKind()).data();
47 return llvm::AMDGPU::getArchNameAMDGCN(A.
amdgpuKind()).data();
51 return "graniterapids";
53 return llvm::IntelGPU::getArchName(A.
intelGPUKind()).data();
55 return llvm::IntelGPU::getIGCATargetName(A.
igcaTarget()).data();
65 return llvm::NVPTX::getVirtualArch(A.
nvptxKind()).data();
68 return "compute_amdgcn";
72 return llvm::IntelGPU::getIGCATargetName(A.
igcaTarget()).data();
88 if (S ==
"amdgcnspirv")
93 if (S ==
"graniterapids")
97 if (llvm::NVPTX::GPUKind NV = llvm::NVPTX::parseArch(S))
99 if (llvm::AMDGPU::GPUKind AK = llvm::AMDGPU::parseArchAMDGCN(S))
101 if (llvm::IntelGPU::GPUKind IK = llvm::IntelGPU::parseArch(S))
103 if (llvm::IntelGPU::IGCATarget IT = llvm::IntelGPU::parseIGCATarget(S))
109 llvm::AMDGPU::GPUKind AK = llvm::AMDGPU::getGPUKindFromSubArch(SubArch);
110 if (AK == llvm::AMDGPU::GK_NONE)
117 return llvm::Triple::NoSubArch;
118 return llvm::AMDGPU::getSubArch(ID.amdgpuKind());
123 if (ID.isAMDGCNSPIRV())
124 return llvm::Triple(llvm::Triple::spirv64, llvm::Triple::NoSubArch,
125 llvm::Triple::AMD, llvm::Triple::AMDHSA);
128 llvm::Triple::ArchType
Arch = DefaultToolchainTriple.isArch64Bit()
129 ? llvm::Triple::nvptx64
130 : llvm::Triple::nvptx;
131 return llvm::Triple(
Arch, llvm::Triple::NoSubArch, llvm::Triple::NVIDIA,
136 return llvm::Triple(llvm::Triple::amdgpu, llvm::Triple::NoSubArch,
137 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)
llvm::IntelGPU::IGCATarget igcaTarget() const
Which IGCA target this is; only valid when isIntelIGCA().
static OffloadArch getIntelIGCA(llvm::IntelGPU::IGCATarget T)
An Intel IGCA target, e.g. igca_20ca; T must be valid.
llvm::IntelGPU::GPUKind intelGPUKind() const
Which Intel GPU this is; only meaningful when isIntelGPU().
static OffloadArch HIPDefault()
static constexpr OffloadArch getUnknown()
llvm::NVPTX::GPUKind nvptxKind() const
static OffloadArch getIntelGPU(llvm::IntelGPU::GPUKind K)
An Intel GPU, named by its entry in the TargetParser device list.
llvm::AMDGPU::GPUKind amdgpuKind() const
TargetArch targetArch() const
static OffloadArch getAMDGPU(llvm::AMDGPU::GPUKind K)
static constexpr OffloadArch getIntelCPU()
Intel CPU offload, which has a single target, so no kind is needed.
Top level wrappers for InstallAPI frontend operations.
llvm::Triple::SubArchType getOffloadArchSubArch(OffloadArch ID)
OffloadArch getSubArchOffloadArch(llvm::Triple::SubArchType SubArch)
const FunctionProtoType * T
const char * OffloadArchToVirtualArchString(OffloadArch A)
OffloadArch StringToOffloadArch(llvm::StringRef S)
const char * OffloadArchToString(OffloadArch A)
llvm::Triple OffloadArchToTriple(const llvm::Triple &DefaultToolchainTriple, OffloadArch ID)