]> granicus.if.org Git - clang/commitdiff
Add NVPTX Support to ValidCPUList (enabling march notes)
authorErich Keane <erich.keane@intel.com>
Thu, 8 Feb 2018 23:16:00 +0000 (23:16 +0000)
committerErich Keane <erich.keane@intel.com>
Thu, 8 Feb 2018 23:16:00 +0000 (23:16 +0000)
A followup to: https://reviews.llvm.org/D42978
This patch adds NVPTX support for
enabling the march notes.

Differential Revision: https://reviews.llvm.org/D43045

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

include/clang/Basic/Cuda.h
lib/Basic/Cuda.cpp
lib/Basic/Targets/NVPTX.cpp
lib/Basic/Targets/NVPTX.h

index 1fa0b52807392a16dbdd898b73f46f38be9fe222..8ce3807751e99775b21530458df292ceb2a0f1e7 100644 (file)
@@ -46,6 +46,7 @@ enum class CudaArch {
   SM_62,
   SM_70,
   SM_72,
+  LAST,
 };
 const char *CudaArchToString(CudaArch A);
 
index 4e61743ab0cadce5d094fe26698a01f31a77fe4b..b7e04bf3f9609026bc6e68522c83a3cbef972b04 100644 (file)
@@ -26,6 +26,8 @@ const char *CudaVersionToString(CudaVersion V) {
 
 const char *CudaArchToString(CudaArch A) {
   switch (A) {
+  case CudaArch::LAST:
+    break;
   case CudaArch::UNKNOWN:
     return "unknown";
   case CudaArch::SM_20:
@@ -133,6 +135,8 @@ CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S) {
 
 CudaVirtualArch VirtualArchForCudaArch(CudaArch A) {
   switch (A) {
+  case CudaArch::LAST:
+    break;
   case CudaArch::UNKNOWN:
     return CudaVirtualArch::UNKNOWN;
   case CudaArch::SM_20:
@@ -168,6 +172,8 @@ CudaVirtualArch VirtualArchForCudaArch(CudaArch A) {
 
 CudaVersion MinVersionForCudaArch(CudaArch A) {
   switch (A) {
+  case CudaArch::LAST:
+    break;
   case CudaArch::UNKNOWN:
     return CudaVersion::UNKNOWN;
   case CudaArch::SM_20:
index 762a6b7aa79a097e1f51915dbea244bf7df41b09..e8e6d2f2f746ff7acd245feb9b52f2dbfe801548 100644 (file)
@@ -157,6 +157,8 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts,
     // Set __CUDA_ARCH__ for the GPU specified.
     std::string CUDAArchCode = [this] {
       switch (GPU) {
+      case CudaArch::LAST:
+        break;
       case CudaArch::UNKNOWN:
         assert(false && "No GPU arch when compiling CUDA device code.");
         return "";
index a84870763f545c2b648fc916837fcb8a6120de76..83d7dfb6e89c4749697787000c5a79178d1d67b6 100644 (file)
@@ -98,6 +98,12 @@ public:
     return StringToCudaArch(Name) != CudaArch::UNKNOWN;
   }
 
+  void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override {
+    for (int i = static_cast<int>(CudaArch::SM_20);
+         i < static_cast<int>(CudaArch::LAST); ++i)
+      Values.emplace_back(CudaArchToString(static_cast<CudaArch>(i)));
+  }
+
   bool setCPU(const std::string &Name) override {
     GPU = StringToCudaArch(Name);
     return GPU != CudaArch::UNKNOWN;