diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -872,7 +872,7 @@ } if (AMDTriple) { auto TempTC = std::make_unique( - *this, *AMDTriple, *HostTC, C.getInputArgs()); + *this, *AMDTriple, *HostTC, C.getInputArgs(), C.getArgs()); for (StringRef Arch : getOffloadArchs( C, C.getArgs(), Action::OFK_OpenMP, &*TempTC, true)) Archs.insert(Arch); @@ -943,7 +943,7 @@ *this, TT, *HostTC, C.getInputArgs()); else if (TT.isAMDGCN()) DeviceTC = std::make_unique( - *this, TT, *HostTC, C.getInputArgs()); + *this, TT, *HostTC, C.getInputArgs(), C.getArgs()); else assert(DeviceTC && "Device toolchain not defined."); } diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h @@ -26,8 +26,8 @@ : public ROCMToolChain { public: AMDGPUOpenMPToolChain(const Driver &D, const llvm::Triple &Triple, - const ToolChain &HostTC, - const llvm::opt::ArgList &Args); + const ToolChain &HostTC, const llvm::opt::ArgList &Args, + const llvm::opt::DerivedArgList &DerivedArgs); const llvm::Triple *getAuxTriple() const override { return &HostTC.getTriple(); @@ -58,6 +58,7 @@ getDeviceLibs(const llvm::opt::ArgList &Args) const override; const ToolChain &HostTC; + const llvm::opt::DerivedArgList &DerivedArgs; }; } // end namespace toolchains diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -58,8 +58,9 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, - const ArgList &Args) - : ROCMToolChain(D, Triple, Args), HostTC(HostTC) { + const ArgList &Args, + const DerivedArgList &DerivedArgs) + : ROCMToolChain(D, Triple, Args), HostTC(HostTC), DerivedArgs(DerivedArgs) { // Lookup binaries into the driver directory, this is used to // discover the clang-offload-bundler executable. getProgramPaths().push_back(getDriver().Dir); @@ -190,7 +191,7 @@ getTriple(), Args.getLastArgValue(options::OPT_march_EQ)); SmallVector BCLibs; - for (auto BCLib : getCommonDeviceLibNames(Args, GpuArch.str(), + for (auto BCLib : getCommonDeviceLibNames(DerivedArgs, GpuArch.str(), /*IsOpenMP=*/true)) BCLibs.emplace_back(BCLib); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7113,7 +7113,7 @@ } if (Triple.isAMDGPU()) { - handleAMDGPUCodeObjectVersionOptions(D, Args, CmdArgs); + handleAMDGPUCodeObjectVersionOptions(D, C.getArgs(), CmdArgs); Args.addOptInFlag(CmdArgs, options::OPT_munsafe_fp_atomics, options::OPT_mno_unsafe_fp_atomics); @@ -8087,7 +8087,8 @@ } if (Triple.isAMDGPU()) - handleAMDGPUCodeObjectVersionOptions(D, Args, CmdArgs, /*IsCC1As=*/true); + handleAMDGPUCodeObjectVersionOptions(D, C.getArgs(), CmdArgs, + /*IsCC1As=*/true); assert(Input.isFilename() && "Invalid input."); CmdArgs.push_back(Input.getFilename());