summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Huber <jhuber6@vols.utk.edu>2023-02-15 07:59:42 -0600
committerTom Stellard <tstellar@redhat.com>2023-03-09 06:39:05 -0800
commitcd358583fa759a2cacdf163ff072e474f555a3be (patch)
tree11e5e45a4caea3af3474690e59a5799f6d7a8d08
parente0ffaabd2f75af7f96fea0878e587314777bae39 (diff)
downloadllvm-cd358583fa759a2cacdf163ff072e474f555a3be.tar.gz
[NVPTX] Fix NVPTX output name in the driver with -save-temps
Summary: Currently, OpenMP and direct compilation uses an NVPTX toolchain to directly invoke the CUDA tools from Clang to do the assembling and linking of NVPTX codes. This breaks under `-save-temps` because of a workaround. The `nvlink` linker does not accept `.o` files, so we need to be selective when we output these. The previous logic keyed off of presense in the temp files and wasn't a great solution. Change this to just query the input args for `-c` to see if we stop at the assembler. Fixes #60767
-rw-r--r--clang/lib/Driver/ToolChains/Cuda.cpp7
-rw-r--r--clang/test/Driver/cuda-cross-compiling.c2
2 files changed, 3 insertions, 6 deletions
diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp
index 9a231c06a074..aa125bb308e8 100644
--- a/clang/lib/Driver/ToolChains/Cuda.cpp
+++ b/clang/lib/Driver/ToolChains/Cuda.cpp
@@ -446,13 +446,8 @@ void NVPTX::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
std::string OutputFileName = TC.getInputFilename(Output);
// If we are invoking `nvlink` internally we need to output a `.cubin` file.
- // Checking if the output is a temporary is the cleanest way to determine
- // this. Putting this logic in `getInputFilename` isn't an option because it
- // relies on the compilation.
// FIXME: This should hopefully be removed if NVIDIA updates their tooling.
- if (Output.isFilename() &&
- llvm::find(C.getTempFiles(), Output.getFilename()) !=
- C.getTempFiles().end()) {
+ if (!C.getInputArgs().getLastArg(options::OPT_c)) {
SmallString<256> Filename(Output.getFilename());
llvm::sys::path::replace_extension(Filename, "cubin");
OutputFileName = Filename.str();
diff --git a/clang/test/Driver/cuda-cross-compiling.c b/clang/test/Driver/cuda-cross-compiling.c
index 992fda8deb33..9750f0950801 100644
--- a/clang/test/Driver/cuda-cross-compiling.c
+++ b/clang/test/Driver/cuda-cross-compiling.c
@@ -43,6 +43,8 @@
//
// RUN: %clang -target nvptx64-nvidia-cuda -march=sm_61 -c -### %s 2>&1 \
// RUN: | FileCheck -check-prefix=OBJECT %s
+// RUN: %clang -target nvptx64-nvidia-cuda -save-temps -march=sm_61 -c -### %s 2>&1 \
+// RUN: | FileCheck -check-prefix=OBJECT %s
// OBJECT: -cc1" "-triple" "nvptx64-nvidia-cuda" "-S" {{.*}} "-target-cpu" "sm_61" "-target-feature" "+ptx{{[0-9]+}}" {{.*}} "-o" "[[PTX:.+]].s"
// OBJECT-NEXT: ptxas{{.*}}"-m64" "-O0" "--gpu-name" "sm_61" "--output-file" "[[OBJ:.+]].o" "[[PTX]].s" "-c"