From 477550e0ffcfbed8d29deac524fd5055b5405fbc Mon Sep 17 00:00:00 2001 From: Gheorghe-Teodor Bercea Date: Wed, 9 Aug 2017 14:59:35 +0000 Subject: [PATCH] [OpenMP] Make OpenMP generated code for the NVIDIA device relocatable by default Original Diff: D29642 This patch was previously reverted due to an error with patch D29654 that this depends on. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@310479 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/ToolChains/Cuda.cpp | 4 ++++ test/Driver/openmp-offload.c | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp index 70f472fb02..927704a685 100644 --- a/lib/Driver/ToolChains/Cuda.cpp +++ b/lib/Driver/ToolChains/Cuda.cpp @@ -291,6 +291,10 @@ void NVPTX::Assembler::ConstructJob(Compilation &C, const JobAction &JA, for (const auto& A : Args.getAllArgValues(options::OPT_Xcuda_ptxas)) CmdArgs.push_back(Args.MakeArgString(A)); + // In OpenMP we need to generate relocatable code. + if (JA.isOffloading(Action::OFK_OpenMP)) + CmdArgs.push_back("-c"); + const char *Exec; if (Arg *A = Args.getLastArg(options::OPT_ptxas_path_EQ)) Exec = A->getValue(); diff --git a/test/Driver/openmp-offload.c b/test/Driver/openmp-offload.c index e9ad2dc0f5..af50d156d7 100644 --- a/test/Driver/openmp-offload.c +++ b/test/Driver/openmp-offload.c @@ -687,3 +687,11 @@ // RUN: | FileCheck -check-prefix=CHK-TWOCUBIN-DARWIN %s // CHK-TWOCUBIN-DARWIN: nvlink"{{.*}}"openmp-offload-{{.*}}.cubin" "openmp-offload-{{.*}}.cubin" + +/// ########################################################################### + +/// Check PTXAS is passed -c flag when offloading to an NVIDIA device using OpenMP. +// RUN: %clang -### -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda -no-canonical-prefixes %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHK-PTXAS-DEFAULT %s + +// CHK-PTXAS-DEFAULT: ptxas{{.*}}" "-c" -- 2.40.0