diff options
author | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2020-06-24 17:34:21 -0400 |
---|---|---|
committer | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2020-06-26 00:26:05 -0400 |
commit | 8013ce4490225faf8aae911ee88087ce445e604c (patch) | |
tree | 38695b000cf0972e14cf7a8e077d44ca430d44e8 /clang/lib | |
parent | 471c806a45bbac2f0f4274d8bea383d06d397a84 (diff) | |
download | llvm-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.h | 2 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains/HIP.cpp | 40 |
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")); |