[PATCH] D133133: [CUDA] Allow using -o with -fsyntax-only
Artem Belevich via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 1 12:01:06 PDT 2022
tra created this revision.
Herald added subscribers: mattd, carlosgalvezp, bixia, yaxunl.
Herald added a project: All.
tra updated this revision to Diff 457341.
tra added a comment.
tra updated this revision to Diff 457343.
tra published this revision for review.
tra added reviewers: jhuber6, yaxunl.
Herald added subscribers: cfe-commits, MaskRay.
Herald added a project: clang.
Added a test.
tra added a comment.
Added new driver tests.
-fsyntax-only breaks down CUDA compilation pipeline and make it look like
multiple independent subcompilations and that trips the multiple arguments check
when -o is specified.
We do want to allow -fsyntax-only to be used with otherwise unmodified clang
options as it's commonly used by various tooling.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D133133
Files:
clang/lib/Driver/Driver.cpp
clang/test/Driver/cuda-bindings.cu
Index: clang/test/Driver/cuda-bindings.cu
===================================================================
--- clang/test/Driver/cuda-bindings.cu
+++ clang/test/Driver/cuda-bindings.cu
@@ -39,9 +39,19 @@
//
// Test two gpu architectures with complete compilation.
//
-// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s 2>&1 \
-// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings --offload-arch=sm_30,sm_35 %s 2>&1 \
-// RUN: | FileCheck -check-prefix=BIN2 %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \
+// RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s 2>&1 \
+// RUN: | FileCheck -check-prefixes=BIN2,AOUT %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \
+// RUN: --offload-arch=sm_30,sm_35 %s 2>&1 \
+// RUN: | FileCheck -check-prefixes=BIN2,AOUT %s
+// .. same, but with explicitly specified output.
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \
+// RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s -o %t/out 2>&1 \
+// RUN: | FileCheck -check-prefixes=BIN2,TOUT %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \
+// RUN: --offload-arch=sm_30,sm_35 %s -o %t/out 2>&1 \
+// RUN: | FileCheck -check-prefixes=BIN2,TOUT %s
// BIN2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output:
// BIN2-NOT: cuda-bindings-device-cuda-nvptx64
// BIN2: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler",{{.*}} output:
@@ -54,8 +64,38 @@
// BIN2-NOT: cuda-bindings-device-cuda-nvptx64
// BIN2: # "powerpc64le-ibm-linux-gnu" - "clang",{{.*}} output:
// BIN2-NOT: cuda-bindings-device-cuda-nvptx64
-// BIN2: # "powerpc64le-ibm-linux-gnu" - "GNU::Linker", inputs:{{.*}}, output: "a.out"
+// AOUT: # "powerpc64le-ibm-linux-gnu" - "GNU::Linker", inputs:{{.*}}, output: "a.out"
+// TOUT: # "powerpc64le-ibm-linux-gnu" - "GNU::Linker", inputs:{{.*}}, output: "{{.*}}/out"
+// .. same, but with -fsyntax-only
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --offload-arch=sm_30,sm_35 %s -o %t/out 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --offload-arch=sm_30,sm_35 %s -o %t/out 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// .. and with --offload-new-driver
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 --offload-new-driver %s 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --offload-arch=sm_30,sm_35 %s --offload-new-driver -o %t/out 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s --offload-new-driver 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings -fsyntax-only \
+// RUN: --offload-arch=sm_30,sm_35 %s --offload-new-driver -o %t/out 2>&1 \
+// RUN: | FileCheck -check-prefix=SYN %s
+// SYN-DAG: # "powerpc64le-ibm-linux-gnu" - "clang", inputs: [{{.*}}], output: (nothing)
+// SYN-DAG: # "nvptx64-nvidia-cuda" - "clang", inputs: [{{.*}}], output: (nothing)
+// SYN-DAG: # "nvptx64-nvidia-cuda" - "clang", inputs: [{{.*}}], output: (nothing)
//
// Test two gpu architectures up to the assemble phase.
//
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -4520,6 +4520,7 @@
llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o);
+ bool SyntaxOnly = C.getArgs().getLastArg(options::OPT_fsyntax_only);
// It is an error to provide a -o option if we are making multiple output
// files. There are exceptions:
@@ -4536,7 +4537,8 @@
//
// OffloadClass of type TY_Nothing: device-only output will place many outputs
// into a single offloading action. We should count all inputs to the action
- // as outputs.
+ // as outputs. Also ignore device-only outputs if we're compiling with
+ // -fsyntax-only.
if (FinalOutput) {
unsigned NumOutputs = 0;
unsigned NumIfsOutputs = 0;
@@ -4550,7 +4552,7 @@
A->getInputs().front()->getKind() == Action::IfsMergeJobClass)))
++NumOutputs;
else if (A->getKind() == Action::OffloadClass &&
- A->getType() == types::TY_Nothing)
+ A->getType() == types::TY_Nothing && !SyntaxOnly)
NumOutputs += A->size();
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133133.457343.patch
Type: text/x-patch
Size: 5250 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220901/9016eab7/attachment.bin>
More information about the cfe-commits
mailing list