clang 23.0.0git
AMDGPUOpenMP.cpp
Go to the documentation of this file.
1//===- AMDGPUOpenMP.cpp - AMDGPUOpenMP ToolChain Implementation -*- C++ -*-===//
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 "AMDGPUOpenMP.h"
10#include "AMDGPU.h"
12#include "clang/Driver/Driver.h"
13#include "clang/Driver/Tool.h"
15#include "llvm/ADT/STLExtras.h"
16
17using namespace clang::driver;
18using namespace clang::driver::toolchains;
19using namespace clang::driver::tools;
20using namespace clang;
21using namespace llvm::opt;
22
24 const llvm::Triple &Triple,
25 const ToolChain &HostTC,
26 const ArgList &Args)
27 : ROCMToolChain(D, Triple, Args), HostTC(HostTC) {
28 // Lookup binaries into the driver directory, this is used to
29 // discover the 'amdgpu-arch' executable.
30 getProgramPaths().push_back(getDriver().Dir);
31}
32
34 const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
35 BoundArch BA, Action::OffloadKind DeviceOffloadingKind) const {
36 assert(DeviceOffloadingKind == Action::OFK_OpenMP &&
37 "Only OpenMP offloading kinds are supported.");
38
39 if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
40 true))
41 return;
42
43 for (auto BCFile : getDeviceLibs(DriverArgs, BA, DeviceOffloadingKind)) {
44 CC1Args.push_back(BCFile.ShouldInternalize ? "-mlink-builtin-bitcode"
45 : "-mlink-bitcode-file");
46 CC1Args.push_back(DriverArgs.MakeArgString(BCFile.Path));
47 }
48
49 // Link the bitcode library late if we're using device LTO.
50 if (isUsingLTO(DriverArgs, DeviceOffloadingKind))
51 return;
52}
53
55AMDGPUOpenMPToolChain::GetCXXStdlibType(const ArgList &Args) const {
56 return HostTC.GetCXXStdlibType(Args);
57}
58
60 const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CC1Args) const {
61 HostTC.AddClangCXXStdlibIncludeArgs(Args, CC1Args);
62}
63
65 const ArgList &DriverArgs, ArgStringList &CC1Args) const {
66 HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args);
67}
68
70 ArgStringList &CC1Args) const {
71 HostTC.AddIAMCUIncludeArgs(Args, CC1Args);
72}
73
74VersionTuple
76 const ArgList &Args) const {
77 return HostTC.computeMSVCVersion(D, Args);
78}
79
82 const llvm::opt::ArgList &Args, BoundArch BA,
83 const Action::OffloadKind DeviceOffloadingKind) const {
84 if (!Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, true))
85 return {};
86
87 StringRef GpuArch = getProcessorFromTargetID(getTriple(), BA.ArchName);
89 for (auto BCLib : getCommonDeviceLibNames(Args, BA.ArchName, GpuArch,
90 DeviceOffloadingKind))
91 BCLibs.emplace_back(BCLib);
92
93 return BCLibs;
94}
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
Definition Driver.h:95
ToolChain - Access to tools for a single platform.
Definition ToolChain.h:96
bool isUsingLTO(const llvm::opt::ArgList &Args, Action::OffloadKind Kind=Action::OFK_None) const
Returns true if LTO is active for this toolchain given the args.
const Driver & getDriver() const
Definition ToolChain.h:286
path_list & getProgramPaths()
Definition ToolChain.h:329
const llvm::Triple & getTriple() const
Definition ToolChain.h:288
void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, BoundArch BA, Action::OffloadKind DeviceOffloadKind) const override
Add options that need to be passed to cc1 for this target.
void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override
Add arguments to use MCU GCC toolchain includes.
void AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CC1Args) const override
AddClangCXXStdlibIncludeArgs - Add the clang -cc1 level arguments to set the include paths to use for...
llvm::SmallVector< BitCodeLibraryInfo, 12 > getDeviceLibs(const llvm::opt::ArgList &Args, BoundArch BA, const Action::OffloadKind DeviceOffloadKind) const override
Get paths for device libraries.
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override
VersionTuple computeMSVCVersion(const Driver *D, const llvm::opt::ArgList &Args) const override
On Windows, returns the MSVC compatibility version.
void AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override
Add the clang cc1 arguments for system include paths.
AMDGPUOpenMPToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const llvm::opt::ArgList &Args)
llvm::SmallVector< BitCodeLibraryInfo, 12 > getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, llvm::StringRef TargetID, llvm::StringRef GPUArch, Action::OffloadKind DeviceOffloadingKind) const
Definition AMDGPU.cpp:1107
ROCMToolChain(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args)
ROCM Toolchain.
Definition AMDGPU.cpp:839
The JSON file list parser is used to communicate input to InstallAPI.
llvm::StringRef getProcessorFromTargetID(const llvm::Triple &T, llvm::StringRef OffloadArch)
Get processor name from target ID.
Definition TargetID.cpp:58
Represents a bound architecture for offload / multiple architecture compilation.
llvm::StringRef ArchName