• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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