]> granicus.if.org Git - clang/commitdiff
[CUDA] Add support for CUDA 8 and sm_60-62.
authorJustin Lebar <jlebar@google.com>
Wed, 6 Jul 2016 21:21:14 +0000 (21:21 +0000)
committerJustin Lebar <jlebar@google.com>
Wed, 6 Jul 2016 21:21:14 +0000 (21:21 +0000)
Summary: Also add sm_32, which was missing.

Reviewers: tra

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274680 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets.cpp
lib/Driver/Action.cpp
lib/Driver/ToolChains.cpp

index 5e9ea6819e8fd235ae547629adab6df3ee455c02..9e812ef80c1169c3a41f1a78a5a22b83f3ea8e28 100644 (file)
@@ -1701,11 +1701,15 @@ class NVPTXTargetInfo : public TargetInfo {
     GK_SM20,
     GK_SM21,
     GK_SM30,
+    GK_SM32,
     GK_SM35,
     GK_SM37,
     GK_SM50,
     GK_SM52,
     GK_SM53,
+    GK_SM60,
+    GK_SM61,
+    GK_SM62,
   } GPU;
 
 public:
@@ -1787,35 +1791,37 @@ public:
     Builder.defineMacro("__NVPTX__");
     if (Opts.CUDAIsDevice) {
       // Set __CUDA_ARCH__ for the GPU specified.
-      std::string CUDAArchCode;
-      switch (GPU) {
-      case GK_SM20:
-        CUDAArchCode = "200";
-        break;
-      case GK_SM21:
-        CUDAArchCode = "210";
-        break;
-      case GK_SM30:
-        CUDAArchCode = "300";
-        break;
-      case GK_SM35:
-        CUDAArchCode = "350";
-        break;
-      case GK_SM37:
-        CUDAArchCode = "370";
-        break;
-      case GK_SM50:
-        CUDAArchCode = "500";
-        break;
-      case GK_SM52:
-        CUDAArchCode = "520";
-        break;
-      case GK_SM53:
-        CUDAArchCode = "530";
-        break;
-      default:
-        llvm_unreachable("Unhandled target CPU");
-      }
+      std::string CUDAArchCode = [this] {
+        switch (GPU) {
+        case GK_NONE:
+          assert(false && "No GPU arch when compiling CUDA device code.");
+          return "";
+        case GK_SM20:
+          return "200";
+        case GK_SM21:
+          return "210";
+        case GK_SM30:
+          return "300";
+        case GK_SM32:
+          return "320";
+        case GK_SM35:
+          return "350";
+        case GK_SM37:
+          return "370";
+        case GK_SM50:
+          return "500";
+        case GK_SM52:
+          return "520";
+        case GK_SM53:
+          return "530";
+        case GK_SM60:
+          return "600";
+        case GK_SM61:
+          return "610";
+        case GK_SM62:
+          return "620";
+        }
+      }();
       Builder.defineMacro("__CUDA_ARCH__", CUDAArchCode);
     }
   }
@@ -1860,11 +1866,15 @@ public:
               .Case("sm_20", GK_SM20)
               .Case("sm_21", GK_SM21)
               .Case("sm_30", GK_SM30)
+              .Case("sm_32", GK_SM32)
               .Case("sm_35", GK_SM35)
               .Case("sm_37", GK_SM37)
               .Case("sm_50", GK_SM50)
               .Case("sm_52", GK_SM52)
               .Case("sm_53", GK_SM53)
+              .Case("sm_60", GK_SM60)
+              .Case("sm_61", GK_SM61)
+              .Case("sm_62", GK_SM62)
               .Default(GK_NONE);
 
     return GPU != GK_NONE;
index b45f290efc1b8e2efea2e4f3ba3e1435bd309ebf..f9e1024f9200b05ae75e00a4c533c3cb9b112df7 100644 (file)
@@ -66,6 +66,9 @@ static const char* GpuArchToComputeName(const char *ArchName) {
       .Case("sm_50", "compute_50")
       .Case("sm_52", "compute_52")
       .Case("sm_53", "compute_53")
+      .Case("sm_60", "compute_60")
+      .Case("sm_61", "compute_61")
+      .Case("sm_62", "compute_62")
       .Default(nullptr);
 }
 
index 7884c402eb219ef7902089f2e95df913db9ec614..58786e092fd6e329b4bc2fc2bd4cc4f03187a4d1 100644 (file)
@@ -1715,6 +1715,8 @@ void Generic_GCC::CudaInstallationDetector::init(
         Args.getLastArgValue(options::OPT_cuda_path_EQ));
   else {
     CudaPathCandidates.push_back(D.SysRoot + "/usr/local/cuda");
+    // FIXME: Uncomment this once we can compile the cuda 8 headers.
+    // CudaPathCandidates.push_back(D.SysRoot + "/usr/local/cuda-8.0");
     CudaPathCandidates.push_back(D.SysRoot + "/usr/local/cuda-7.5");
     CudaPathCandidates.push_back(D.SysRoot + "/usr/local/cuda-7.0");
   }
@@ -1761,6 +1763,9 @@ void Generic_GCC::CudaInstallationDetector::init(
         CudaLibDeviceMap["sm_50"] = FilePath;
         CudaLibDeviceMap["sm_52"] = FilePath;
         CudaLibDeviceMap["sm_53"] = FilePath;
+        CudaLibDeviceMap["sm_60"] = FilePath;
+        CudaLibDeviceMap["sm_61"] = FilePath;
+        CudaLibDeviceMap["sm_62"] = FilePath;
       }
     }