Home | History | Annotate | Download | only in Basic
      1 //===--- Cuda.h - Utilities for compiling CUDA code  ------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef LLVM_CLANG_BASIC_CUDA_H
     11 #define LLVM_CLANG_BASIC_CUDA_H
     12 
     13 namespace llvm {
     14 class StringRef;
     15 } // namespace llvm
     16 
     17 namespace clang {
     18 
     19 enum class CudaVersion {
     20   UNKNOWN,
     21   CUDA_70,
     22   CUDA_75,
     23   CUDA_80,
     24 };
     25 const char *CudaVersionToString(CudaVersion V);
     26 
     27 // No string -> CudaVersion conversion function because there's no canonical
     28 // spelling of the various CUDA versions.
     29 
     30 enum class CudaArch {
     31   UNKNOWN,
     32   SM_20,
     33   SM_21,
     34   SM_30,
     35   SM_32,
     36   SM_35,
     37   SM_37,
     38   SM_50,
     39   SM_52,
     40   SM_53,
     41   SM_60,
     42   SM_61,
     43   SM_62,
     44 };
     45 const char *CudaArchToString(CudaArch A);
     46 
     47 // The input should have the form "sm_20".
     48 CudaArch StringToCudaArch(llvm::StringRef S);
     49 
     50 enum class CudaVirtualArch {
     51   UNKNOWN,
     52   COMPUTE_20,
     53   COMPUTE_30,
     54   COMPUTE_32,
     55   COMPUTE_35,
     56   COMPUTE_37,
     57   COMPUTE_50,
     58   COMPUTE_52,
     59   COMPUTE_53,
     60   COMPUTE_60,
     61   COMPUTE_61,
     62   COMPUTE_62,
     63 };
     64 const char *CudaVirtualArchToString(CudaVirtualArch A);
     65 
     66 // The input should have the form "compute_20".
     67 CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S);
     68 
     69 /// Get the compute_xx corresponding to an sm_yy.
     70 CudaVirtualArch VirtualArchForCudaArch(CudaArch A);
     71 
     72 /// Get the earliest CudaVersion that supports the given CudaArch.
     73 CudaVersion MinVersionForCudaArch(CudaArch A);
     74 
     75 } // namespace clang
     76 
     77 #endif
     78