forked from OSchip/llvm-project
[CUDA] Don't initialize the CUDA toolchain if we don't have any CUDA 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
This commit is contained in:
parent
ba122ab42f
commit
0e450a5d61
|
@ -507,10 +507,6 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
|
||||||
// The compilation takes ownership of Args.
|
// The compilation takes ownership of Args.
|
||||||
Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs);
|
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))
|
if (!HandleImmediateArgs(*C))
|
||||||
return C;
|
return C;
|
||||||
|
|
||||||
|
@ -518,6 +514,19 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
|
||||||
InputList Inputs;
|
InputList Inputs;
|
||||||
BuildInputs(C->getDefaultToolChain(), *TranslatedArgs, 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
|
// Construct the list of abstract actions to perform for this compilation. On
|
||||||
// MachO targets this uses the driver-driver and universal actions.
|
// MachO targets this uses the driver-driver and universal actions.
|
||||||
if (TC.getTriple().isOSBinFormatMachO())
|
if (TC.getTriple().isOSBinFormatMachO())
|
||||||
|
|
Loading…
Reference in New Issue