clang 24.0.0git
AMDGPU.cpp
Go to the documentation of this file.
1//===--- AMDGPU.cpp - AMDGPU Helpers for Tools ----------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "AMDGPU.h"
11#include "clang/Driver/Driver.h"
13#include "llvm/TargetParser/AMDGPUTargetParser.h"
14
15using namespace clang::driver;
16using namespace clang::driver::tools;
17using namespace clang;
18using namespace llvm::opt;
19
20void AMDGPU::setArchNameInTriple(const Driver &D, const ArgList &Args,
21 BoundArch BA, types::ID InputType,
22 llvm::Triple &Triple) {
23 StringRef MArch = BA.ArchName;
24 if (MArch.empty())
25 AMDGPU::getAMDGPUArchCPUFromArgs(Triple, Args, MArch);
26
27 if (MArch == "amdgcnspirv") {
28 Triple.setArch(llvm::Triple::ArchType::spirv64);
29 return;
30 }
31
32 StringRef ProcName = getProcessorFromTargetID(Triple, MArch);
33 llvm::AMDGPU::GPUKind GK = llvm::AMDGPU::parseArchAMDGCN(ProcName);
34 if (GK == llvm::AMDGPU::GPUKind::GK_NONE) {
35 // Normalize legacy "amdgcn" triples to "amdgpu"
36 Triple.setArch(Triple.getArch(), Triple.getSubArch());
37 return;
38 }
39
40 Triple.setArch(Triple.getArch(), static_cast<llvm::Triple::SubArchType>(
41 llvm::AMDGPU::getSubArch(GK)));
42}
43
44void AMDGPU::getAMDGPUArchCPUFromArgs(const llvm::Triple &Triple,
45 const llvm::opt::ArgList &Args,
46 llvm::StringRef &Arch) {
47 if (const Arg *MCPU = Args.getLastArg(options::OPT_mcpu_EQ))
48 Arch = MCPU->getValue();
49}
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
Definition Driver.h:96
void setArchNameInTriple(const Driver &D, const llvm::opt::ArgList &Args, BoundArch BA, types::ID InputType, llvm::Triple &Triple)
void getAMDGPUArchCPUFromArgs(const llvm::Triple &Triple, const llvm::opt::ArgList &Args, llvm::StringRef &Arch)
Definition AMDGPU.cpp:44
Top level wrappers for InstallAPI frontend operations.
llvm::StringRef getProcessorFromTargetID(const llvm::Triple &T, llvm::StringRef OffloadArch)
Get processor name from target ID.
Definition TargetID.cpp:59
Represents a bound architecture for offload / multiple architecture compilation.
llvm::StringRef ArchName