Author: jlebar Date: Wed Oct 25 14:32:06 2017 New Revision: 316611 URL: http://llvm.org/viewvc/llvm-project?rev=316611&view=rev Log: [CUDA] Print an error if you try to compile with < sm_30 on CUDA 9.
Summary: CUDA 9's minimum sm is sm_30. Ideally we should also make sm_30 the default when compiling with CUDA 9, but that seems harder than it should be. Subscribers: sanjoy Differential Revision: https://reviews.llvm.org/D39109 Added: cfe/trunk/test/Driver/Inputs/CUDA_90/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/bin/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/bin/.keep cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/include/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/include/.keep cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib/.keep cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib64/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib64/.keep cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/nvvm/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/nvvm/libdevice/ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/nvvm/libdevice/libdevice.10.bc cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/version.txt Modified: cfe/trunk/include/clang/Basic/Cuda.h cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td cfe/trunk/lib/Basic/Cuda.cpp cfe/trunk/lib/Driver/ToolChains/Cuda.cpp cfe/trunk/lib/Driver/ToolChains/Cuda.h cfe/trunk/test/Driver/cuda-bad-arch.cu Modified: cfe/trunk/include/clang/Basic/Cuda.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Cuda.h?rev=316611&r1=316610&r2=316611&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/Cuda.h (original) +++ cfe/trunk/include/clang/Basic/Cuda.h Wed Oct 25 14:32:06 2017 @@ -22,6 +22,7 @@ enum class CudaVersion { CUDA_75, CUDA_80, CUDA_90, + LATEST = CUDA_90, }; const char *CudaVersionToString(CudaVersion V); @@ -75,6 +76,9 @@ CudaVirtualArch VirtualArchForCudaArch(C /// Get the earliest CudaVersion that supports the given CudaArch. CudaVersion MinVersionForCudaArch(CudaArch A); +/// Get the latest CudaVersion that supports the given CudaArch. +CudaVersion MaxVersionForCudaArch(CudaArch A); + } // namespace clang #endif Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=316611&r1=316610&r2=316611&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Wed Oct 25 14:32:06 2017 @@ -29,9 +29,10 @@ def err_drv_no_cuda_installation : Error def err_drv_no_cuda_libdevice : Error< "cannot find libdevice for %0. Provide path to different CUDA installation " "via --cuda-path, or pass -nocudalib to build without linking with libdevice.">; -def err_drv_cuda_version_too_low : Error< - "GPU arch %1 requires CUDA version at least %3, but installation at %0 is %2. " - "Use --cuda-path to specify a different CUDA install, or pass " +def err_drv_cuda_version_unsupported : Error< + "GPU arch %0 is supported by CUDA versions between %1 and %2 (inclusive), " + "but installation at %3 is %4. Use --cuda-path to specify a different CUDA " + "install, pass a different GPU arch with --cuda-gpu-arch, or pass " "--no-cuda-version-check.">; def err_drv_cuda_nvptx_host : Error<"unsupported use of NVPTX for host compilation.">; def err_drv_invalid_thread_model_for_target : Error< Modified: cfe/trunk/lib/Basic/Cuda.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Cuda.cpp?rev=316611&r1=316610&r2=316611&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Cuda.cpp (original) +++ cfe/trunk/lib/Basic/Cuda.cpp Wed Oct 25 14:32:06 2017 @@ -180,4 +180,16 @@ CudaVersion MinVersionForCudaArch(CudaAr llvm_unreachable("invalid enum"); } +CudaVersion MaxVersionForCudaArch(CudaArch A) { + switch (A) { + case CudaArch::UNKNOWN: + return CudaVersion::UNKNOWN; + case CudaArch::SM_20: + case CudaArch::SM_21: + return CudaVersion::CUDA_80; + default: + return CudaVersion::LATEST; + } +} + } // namespace clang Modified: cfe/trunk/lib/Driver/ToolChains/Cuda.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Cuda.cpp?rev=316611&r1=316610&r2=316611&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Cuda.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Cuda.cpp Wed Oct 25 14:32:06 2017 @@ -205,15 +205,17 @@ void CudaInstallationDetector::AddCudaIn void CudaInstallationDetector::CheckCudaVersionSupportsArch( CudaArch Arch) const { if (Arch == CudaArch::UNKNOWN || Version == CudaVersion::UNKNOWN || - ArchsWithVersionTooLowErrors.count(Arch) > 0) + ArchsWithBadVersion.count(Arch) > 0) return; - auto RequiredVersion = MinVersionForCudaArch(Arch); - if (Version < RequiredVersion) { - ArchsWithVersionTooLowErrors.insert(Arch); - D.Diag(diag::err_drv_cuda_version_too_low) - << InstallPath << CudaArchToString(Arch) << CudaVersionToString(Version) - << CudaVersionToString(RequiredVersion); + auto MinVersion = MinVersionForCudaArch(Arch); + auto MaxVersion = MaxVersionForCudaArch(Arch); + if (Version < MinVersion || Version > MaxVersion) { + ArchsWithBadVersion.insert(Arch); + D.Diag(diag::err_drv_cuda_version_unsupported) + << CudaArchToString(Arch) << CudaVersionToString(MinVersion) + << CudaVersionToString(MaxVersion) << InstallPath + << CudaVersionToString(Version); } } Modified: cfe/trunk/lib/Driver/ToolChains/Cuda.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Cuda.h?rev=316611&r1=316610&r2=316611&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Cuda.h (original) +++ cfe/trunk/lib/Driver/ToolChains/Cuda.h Wed Oct 25 14:32:06 2017 @@ -40,7 +40,7 @@ private: // CUDA architectures for which we have raised an error in // CheckCudaVersionSupportsArch. - mutable llvm::SmallSet<CudaArch, 4> ArchsWithVersionTooLowErrors; + mutable llvm::SmallSet<CudaArch, 4> ArchsWithBadVersion; public: CudaInstallationDetector(const Driver &D, const llvm::Triple &HostTriple, Added: cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/bin/.keep URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/bin/.keep?rev=316611&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/include/.keep URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/include/.keep?rev=316611&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib/.keep URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib/.keep?rev=316611&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib64/.keep URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/lib64/.keep?rev=316611&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/nvvm/libdevice/libdevice.10.bc URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/nvvm/libdevice/libdevice.10.bc?rev=316611&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/version.txt URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/version.txt?rev=316611&view=auto ============================================================================== --- cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/version.txt (added) +++ cfe/trunk/test/Driver/Inputs/CUDA_90/usr/local/cuda/version.txt Wed Oct 25 14:32:06 2017 @@ -0,0 +1 @@ +CUDA Version 9.0.103 Modified: cfe/trunk/test/Driver/cuda-bad-arch.cu URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cuda-bad-arch.cu?rev=316611&r1=316610&r2=316611&view=diff ============================================================================== --- cfe/trunk/test/Driver/cuda-bad-arch.cu (original) +++ cfe/trunk/test/Driver/cuda-bad-arch.cu Wed Oct 25 14:32:06 2017 @@ -12,6 +12,12 @@ // BAD: error: Unsupported CUDA gpu architecture +// RUN: %clang -### -v --target=x86_64-linux-gnu --cuda-gpu-arch=sm_21 \ +// RUN: --cuda-path=%S/Inputs/CUDA_90/usr/local/cuda %s 2>&1 \ +// RUN: | FileCheck -check-prefix BAD_CUDA9 %s + +// BAD_CUDA9: GPU arch sm_21 is supported by CUDA versions between 7.0 and 8.0 + // RUN: %clang -### -target x86_64-linux-gnu --cuda-gpu-arch=sm_20 -c %s 2>&1 \ // RUN: | FileCheck -check-prefix OK %s // RUN: %clang -### -target x86_64-linux-gnu --cuda-gpu-arch=sm_52 -c %s 2>&1 \ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits