summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Hahnfeld <hahnjo@hahnjo.de>2017-10-16 13:31:30 +0000
committerJonas Hahnfeld <hahnjo@hahnjo.de>2017-10-16 13:31:30 +0000
commite2c342fc654804a549d9b26f11e3aaf970c87048 (patch)
tree857e4d54695a1078c8ffeb9fa8aabd4dc51f31aa
parentee6b5a79dc390f0792039a9c6c66adf55534b97d (diff)
downloadbcm5719-llvm-e2c342fc654804a549d9b26f11e3aaf970c87048.tar.gz
bcm5719-llvm-e2c342fc654804a549d9b26f11e3aaf970c87048.zip
[CUDA] Require libdevice only if needed
If the user passes -nocudalib, we can live without it being present. Simplify the code by just checking whether LibDeviceMap is empty. Differential Revision: https://reviews.llvm.org/D38901 llvm-svn: 315902
-rw-r--r--clang/lib/Driver/ToolChains/Cuda.cpp17
-rw-r--r--clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/bin/.keep0
-rw-r--r--clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/include/.keep0
-rw-r--r--clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib/.keep0
-rw-r--r--clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib64/.keep0
-rw-r--r--clang/test/Driver/cuda-detect.cu16
6 files changed, 19 insertions, 14 deletions
diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp
index 349f9e4f51a..4d040a204dd 100644
--- a/clang/lib/Driver/ToolChains/Cuda.cpp
+++ b/clang/lib/Driver/ToolChains/Cuda.cpp
@@ -87,8 +87,7 @@ CudaInstallationDetector::CudaInstallationDetector(
LibDevicePath = InstallPath + "/nvvm/libdevice";
auto &FS = D.getVFS();
- if (!(FS.exists(IncludePath) && FS.exists(BinPath) &&
- FS.exists(LibDevicePath)))
+ if (!(FS.exists(IncludePath) && FS.exists(BinPath)))
continue;
// On Linux, we have both lib and lib64 directories, and we need to choose
@@ -167,17 +166,9 @@ CudaInstallationDetector::CudaInstallationDetector(
}
}
- // This code prevents IsValid from being set when
- // no libdevice has been found.
- bool allEmpty = true;
- std::string LibDeviceFile;
- for (auto key : LibDeviceMap.keys()) {
- LibDeviceFile = LibDeviceMap.lookup(key);
- if (!LibDeviceFile.empty())
- allEmpty = false;
- }
-
- if (allEmpty)
+ // Check that we have found at least one libdevice that we can link in if
+ // -nocudalib hasn't been specified.
+ if (LibDeviceMap.empty() && !Args.hasArg(options::OPT_nocudalib))
continue;
IsValid = true;
diff --git a/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/bin/.keep b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/bin/.keep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/bin/.keep
diff --git a/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/include/.keep b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/include/.keep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/include/.keep
diff --git a/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib/.keep b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib/.keep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib/.keep
diff --git a/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib64/.keep b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib64/.keep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/CUDA-nolibdevice/usr/local/cuda/lib64/.keep
diff --git a/clang/test/Driver/cuda-detect.cu b/clang/test/Driver/cuda-detect.cu
index aaef89ac453..1db0cfbfa3c 100644
--- a/clang/test/Driver/cuda-detect.cu
+++ b/clang/test/Driver/cuda-detect.cu
@@ -2,7 +2,7 @@
// REQUIRES: x86-registered-target
// REQUIRES: nvptx-registered-target
//
-// # Check that we properly detect CUDA installation.
+// Check that we properly detect CUDA installation.
// RUN: %clang -v --target=i386-unknown-linux \
// RUN: --sysroot=%S/no-cuda-there 2>&1 | FileCheck %s -check-prefix NOCUDA
// RUN: %clang -v --target=i386-apple-macosx \
@@ -18,6 +18,19 @@
// RUN: %clang -v --target=i386-apple-macosx \
// RUN: --cuda-path=%S/Inputs/CUDA/usr/local/cuda 2>&1 | FileCheck %s
+// Check that we don't find a CUDA installation without libdevice ...
+// RUN: %clang -v --target=i386-unknown-linux \
+// RUN: --sysroot=%S/Inputs/CUDA-nolibdevice 2>&1 | FileCheck %s -check-prefix NOCUDA
+// RUN: %clang -v --target=i386-apple-macosx \
+// RUN: --sysroot=%S/Inputs/CUDA-nolibdevice 2>&1 | FileCheck %s -check-prefix NOCUDA
+
+// ... unless the user doesn't need libdevice
+// RUN: %clang -v --target=i386-unknown-linux -nocudalib \
+// RUN: --sysroot=%S/Inputs/CUDA-nolibdevice 2>&1 | FileCheck %s -check-prefix NO-LIBDEVICE
+// RUN: %clang -v --target=i386-apple-macosx -nocudalib \
+// RUN: --sysroot=%S/Inputs/CUDA-nolibdevice 2>&1 | FileCheck %s -check-prefix NO-LIBDEVICE
+
+
// Make sure we map libdevice bitcode files to proper GPUs. These
// tests use Inputs/CUDA_80 which has full set of libdevice files.
// However, libdevice mapping only matches CUDA-7.x at the moment.
@@ -112,6 +125,7 @@
// RUN: | FileCheck %s --check-prefix CHECK-CXXINCLUDE
// CHECK: Found CUDA installation: {{.*}}/Inputs/CUDA/usr/local/cuda
+// NO-LIBDEVICE: Found CUDA installation: {{.*}}/Inputs/CUDA-nolibdevice/usr/local/cuda
// NOCUDA-NOT: Found CUDA installation:
// MISSINGLIBDEVICE: error: cannot find libdevice for sm_20.
OpenPOWER on IntegriCloud