Skip to content

Commit

Permalink
[CUDA] Don't initialize the CUDA toolchain if we don't have any CUDA …
Browse files Browse the repository at this point in the history
…inputs.

Summary:
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!

Reviewers: echristo

Subscribers: tra, sunfish, cfe-commits

Differential Revision: http://reviews.llvm.org/D18629

llvm-svn: 264965
  • Loading branch information
Justin Lebar committed Mar 30, 2016
1 parent ba122ab commit 0e450a5
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions clang/lib/Driver/Driver.cpp
Expand Up @@ -507,17 +507,26 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
// 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())
Expand Down

0 comments on commit 0e450a5

Please sign in to comment.