]> granicus.if.org Git - clang/commitdiff
[OpenMP] Make OpenMP generated code for the NVIDIA device relocatable by default
authorGheorghe-Teodor Bercea <gheorghe-teod.bercea@ibm.com>
Wed, 9 Aug 2017 14:59:35 +0000 (14:59 +0000)
committerGheorghe-Teodor Bercea <gheorghe-teod.bercea@ibm.com>
Wed, 9 Aug 2017 14:59:35 +0000 (14:59 +0000)
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
test/Driver/openmp-offload.c

index 70f472fb025f3f9fa6a06a963ddf7c4471f8c37f..927704a685745010b14b0bb3f1c7bf1b3a32d6e0 100644 (file)
@@ -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();
index e9ad2dc0f5628d78f9fb7f147bfc634c64d7eb1e..af50d156d7da03074598af8847c5ce8204aea297 100644 (file)
 // 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"