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 @@ -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()); diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c --- a/clang/test/Driver/amdgpu-openmp-toolchain.c +++ b/clang/test/Driver/amdgpu-openmp-toolchain.c @@ -69,3 +69,10 @@ // RUN: --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode -fopenmp-new-driver %s 2>&1 | \ // RUN: FileCheck %s --check-prefix=CHECK-LIB-DEVICE-NOGPULIB // CHECK-LIB-DEVICE-NOGPULIB-NOT: "-cc1" {{.*}}ocml.bc"{{.*}}ockl.bc"{{.*}}oclc_daz_opt_on.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_correctly_rounded_sqrt_on.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc" + +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -mcode-object-version=4 -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 %s 2>&1 | FileCheck %s --check-prefix=CHECK-COV4 +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -mcode-object-version=5 -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 %s 2>&1 | FileCheck %s --check-prefix=CHECK-COV5 +// CHECK-COV4: "-cc1" {{.*}}oclc_abi_version_400.bc +// CHECK-COV4-NOT: "-cc1" {{.*}}oclc_abi_version_500.bc +// CHECK-COV5: "-cc1" {{.*}}oclc_abi_version_500.bc +// CHECK-COV5-NOT: "-cc1" {{.*}}oclc_abi_version_400.bc