[PATCH] D18629: [CUDA] Don't initialize the CUDA toolchain if we don't have any CUDA inputs.
Justin Lebar via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 30 16:11:33 PDT 2016
jlebar created this revision.
jlebar added a reviewer: tra.
jlebar added subscribers: cfe-commits, sunfish, echristo.
This prevents errors when you invoke clang with a flag that the NVPTX
toolchain doesn't support. For example, on x86-64,
clang -mthread-model single -x c++ /dev/null -o /dev/null
should output just one error about "invalid thread model 'single' in
'-mthread-model single' for this target"; x86-64 doesn't support
-mthread-model, but we shouldn't also instantiate a NVPTX target!
http://reviews.llvm.org/D18629
Files:
lib/Driver/Driver.cpp
Index: lib/Driver/Driver.cpp
===================================================================
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -507,17 +507,26 @@
// The compilation takes ownership of Args.
Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs);
- C->setCudaDeviceToolChain(
- &getToolChain(C->getArgs(), llvm::Triple(TC.getTriple().isArch64Bit()
- ? "nvptx64-nvidia-cuda"
- : "nvptx-nvidia-cuda")));
if (!HandleImmediateArgs(*C))
return C;
// Construct the list of inputs.
InputList Inputs;
BuildInputs(C->getDefaultToolChain(), *TranslatedArgs, Inputs);
+ // Initialize the CUDA device TC only if we have any CUDA Inputs. This is
+ // necessary so that we don't break compilations that pass flags that are
+ // incompatible with the NVPTX TC (e.g. -mthread-model single).
+ if (llvm::any_of(Inputs, [](const std::pair<types::ID, const Arg *> &I) {
+ return I.first == types::TY_CUDA || I.first == types::TY_PP_CUDA ||
+ I.first == types::TY_CUDA_DEVICE;
+ })) {
+ C->setCudaDeviceToolChain(
+ &getToolChain(C->getArgs(), llvm::Triple(TC.getTriple().isArch64Bit()
+ ? "nvptx64-nvidia-cuda"
+ : "nvptx-nvidia-cuda")));
+ }
+
// Construct the list of abstract actions to perform for this compilation. On
// MachO targets this uses the driver-driver and universal actions.
if (TC.getTriple().isOSBinFormatMachO())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18629.52146.patch
Type: text/x-patch
Size: 1649 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160330/ab2db007/attachment-0001.bin>
More information about the cfe-commits
mailing list