aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
authorYaxun (Sam) Liu <yaxun.liu@amd.com>2020-06-24 17:34:21 -0400
committerYaxun (Sam) Liu <yaxun.liu@amd.com>2020-06-26 00:26:05 -0400
commit8013ce4490225faf8aae911ee88087ce445e604c (patch)
tree38695b000cf0972e14cf7a8e077d44ca430d44e8 /clang/lib
parent471c806a45bbac2f0f4274d8bea383d06d397a84 (diff)
downloadllvm-8013ce4490225faf8aae911ee88087ce445e604c.zip
llvm-8013ce4490225faf8aae911ee88087ce445e604c.tar.gz
llvm-8013ce4490225faf8aae911ee88087ce445e604c.tar.bz2
[HIP] Add missing options for lto
Add -mcpu, -mattr, -mllvm, and -save-temps options for lto when necessary. Differential Revision: https://reviews.llvm.org/D82506
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/ToolChains/AMDGPU.h2
-rw-r--r--clang/lib/Driver/ToolChains/HIP.cpp40
2 files changed, 34 insertions, 8 deletions
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h
index 671a987..3b2a85b 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/AMDGPU.h
@@ -85,6 +85,8 @@ public:
return true;
}
+ /// Needed for translating LTO options.
+ const char *getDefaultLinker() const override { return "ld.lld"; }
};
class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain {
diff --git a/clang/lib/Driver/ToolChains/HIP.cpp b/clang/lib/Driver/ToolChains/HIP.cpp
index f524951..15c44f3 100644
--- a/clang/lib/Driver/ToolChains/HIP.cpp
+++ b/clang/lib/Driver/ToolChains/HIP.cpp
@@ -57,14 +57,38 @@ void AMDGCN::Linker::constructLldCommand(Compilation &C, const JobAction &JA,
const llvm::opt::ArgList &Args) const {
// Construct lld command.
// The output from ld.lld is an HSA code object file.
- ArgStringList LldArgs{"-flavor",
- "gnu",
- "--no-undefined",
- "-shared",
- "-mllvm",
- "-amdgpu-internalize-symbols",
- "-o",
- Output.getFilename()};
+ ArgStringList LldArgs{"-flavor", "gnu", "--no-undefined", "-shared",
+ "-plugin-opt=-amdgpu-internalize-symbols"};
+
+ auto &TC = getToolChain();
+ auto &D = TC.getDriver();
+ assert(!Inputs.empty() && "Must have at least one input.");
+ addLTOOptions(TC, Args, LldArgs, Output, Inputs[0],
+ D.getLTOMode() == LTOK_Thin);
+
+ // Extract all the -m options
+ std::vector<llvm::StringRef> Features;
+ amdgpu::getAMDGPUTargetFeatures(D, Args, Features);
+
+ // Add features to mattr such as cumode
+ std::string MAttrString = "-plugin-opt=-mattr=";
+ for (auto OneFeature : unifyTargetFeatures(Features)) {
+ MAttrString.append(Args.MakeArgString(OneFeature));
+ if (OneFeature != Features.back())
+ MAttrString.append(",");
+ }
+ if (!Features.empty())
+ LldArgs.push_back(Args.MakeArgString(MAttrString));
+
+ for (const Arg *A : Args.filtered(options::OPT_mllvm)) {
+ LldArgs.push_back(
+ Args.MakeArgString(Twine("-plugin-opt=") + A->getValue(0)));
+ }
+
+ if (C.getDriver().isSaveTempsEnabled())
+ LldArgs.push_back("-save-temps");
+
+ LldArgs.append({"-o", Output.getFilename()});
for (auto Input : Inputs)
LldArgs.push_back(Input.getFilename());
const char *Lld = Args.MakeArgString(getToolChain().GetProgramPath("lld"));