summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Cuda.cpp
diff options
context:
space:
mode:
authorArtem Belevich <tra@google.com>2018-01-30 00:00:12 +0000
committerArtem Belevich <tra@google.com>2018-01-30 00:00:12 +0000
commitfbc56a904fe878817008ac071b27a32eec2aa7e3 (patch)
treedb8673c545692d042d01ea0ab4d4cee912aecdbc /clang/lib/Basic/Cuda.cpp
parenta8fc370d518748ffda5252ec40350afacedc2fb1 (diff)
downloadbcm5719-llvm-fbc56a904fe878817008ac071b27a32eec2aa7e3.tar.gz
bcm5719-llvm-fbc56a904fe878817008ac071b27a32eec2aa7e3.zip
[CUDA] Added partial support for CUDA-9.1
Clang can use CUDA-9.1 now, though new APIs (are not implemented yet. The major change is that headers in CUDA-9.1 went through substantial changes that started in CUDA-9.0 which required substantial changes in the cuda compatibility headers provided by clang. There are two major issues: * CUDA SDK no longer provides declarations for libdevice functions. * A lot of device-side functions have become nvcc's builtins and CUDA headers no longer contain their implementations. This patch changes the way CUDA headers are handled if we compile with CUDA 9.x. Both 9.0 and 9.1 are affected. * Clang provides its own declarations of libdevice functions. * For CUDA-9.x clang now provides implementation of device-side 'standard library' functions using libdevice. This patch should not affect compilation with CUDA-8. There may be some observable differences for CUDA-9.0, though they are not expected to affect functionality. Tested: CUDA test-suite tests for all supported combinations of: CUDA: 7.0,7.5,8.0,9.0,9.1 GPU: sm_20, sm_35, sm_60, sm_70 Differential Revision: https://reviews.llvm.org/D42513 llvm-svn: 323713
Diffstat (limited to 'clang/lib/Basic/Cuda.cpp')
-rw-r--r--clang/lib/Basic/Cuda.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Basic/Cuda.cpp b/clang/lib/Basic/Cuda.cpp
index 58b99a3b58c..4e61743ab0c 100644
--- a/clang/lib/Basic/Cuda.cpp
+++ b/clang/lib/Basic/Cuda.cpp
@@ -18,6 +18,8 @@ const char *CudaVersionToString(CudaVersion V) {
return "8.0";
case CudaVersion::CUDA_90:
return "9.0";
+ case CudaVersion::CUDA_91:
+ return "9.1";
}
llvm_unreachable("invalid enum");
}
@@ -52,6 +54,8 @@ const char *CudaArchToString(CudaArch A) {
return "sm_62";
case CudaArch::SM_70:
return "sm_70";
+ case CudaArch::SM_72:
+ return "sm_72";
}
llvm_unreachable("invalid enum");
}
@@ -71,6 +75,7 @@ CudaArch StringToCudaArch(llvm::StringRef S) {
.Case("sm_61", CudaArch::SM_61)
.Case("sm_62", CudaArch::SM_62)
.Case("sm_70", CudaArch::SM_70)
+ .Case("sm_72", CudaArch::SM_72)
.Default(CudaArch::UNKNOWN);
}
@@ -102,6 +107,8 @@ const char *CudaVirtualArchToString(CudaVirtualArch A) {
return "compute_62";
case CudaVirtualArch::COMPUTE_70:
return "compute_70";
+ case CudaVirtualArch::COMPUTE_72:
+ return "compute_72";
}
llvm_unreachable("invalid enum");
}
@@ -120,6 +127,7 @@ CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S) {
.Case("compute_61", CudaVirtualArch::COMPUTE_61)
.Case("compute_62", CudaVirtualArch::COMPUTE_62)
.Case("compute_70", CudaVirtualArch::COMPUTE_70)
+ .Case("compute_72", CudaVirtualArch::COMPUTE_72)
.Default(CudaVirtualArch::UNKNOWN);
}
@@ -152,6 +160,8 @@ CudaVirtualArch VirtualArchForCudaArch(CudaArch A) {
return CudaVirtualArch::COMPUTE_62;
case CudaArch::SM_70:
return CudaVirtualArch::COMPUTE_70;
+ case CudaArch::SM_72:
+ return CudaVirtualArch::COMPUTE_72;
}
llvm_unreachable("invalid enum");
}
@@ -176,6 +186,8 @@ CudaVersion MinVersionForCudaArch(CudaArch A) {
return CudaVersion::CUDA_80;
case CudaArch::SM_70:
return CudaVersion::CUDA_90;
+ case CudaArch::SM_72:
+ return CudaVersion::CUDA_91;
}
llvm_unreachable("invalid enum");
}
OpenPOWER on IntegriCloud