File indexing completed on 2026-05-10 08:36:48
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_CLANG_BASIC_CUDA_H
0010 #define LLVM_CLANG_BASIC_CUDA_H
0011
0012 namespace llvm {
0013 class StringRef;
0014 class Twine;
0015 class VersionTuple;
0016 }
0017
0018 namespace clang {
0019
0020 enum class CudaVersion {
0021 UNKNOWN,
0022 CUDA_70,
0023 CUDA_75,
0024 CUDA_80,
0025 CUDA_90,
0026 CUDA_91,
0027 CUDA_92,
0028 CUDA_100,
0029 CUDA_101,
0030 CUDA_102,
0031 CUDA_110,
0032 CUDA_111,
0033 CUDA_112,
0034 CUDA_113,
0035 CUDA_114,
0036 CUDA_115,
0037 CUDA_116,
0038 CUDA_117,
0039 CUDA_118,
0040 CUDA_120,
0041 CUDA_121,
0042 CUDA_122,
0043 CUDA_123,
0044 CUDA_124,
0045 CUDA_125,
0046 CUDA_126,
0047 CUDA_128,
0048 FULLY_SUPPORTED = CUDA_123,
0049 PARTIALLY_SUPPORTED =
0050 CUDA_128,
0051 NEW = 10000,
0052 };
0053 const char *CudaVersionToString(CudaVersion V);
0054
0055 CudaVersion CudaStringToVersion(const llvm::Twine &S);
0056
0057 enum class OffloadArch {
0058 UNUSED,
0059 UNKNOWN,
0060
0061 SM_20,
0062 SM_21,
0063 SM_30,
0064
0065 SM_32_,
0066 SM_35,
0067 SM_37,
0068 SM_50,
0069 SM_52,
0070 SM_53,
0071 SM_60,
0072 SM_61,
0073 SM_62,
0074 SM_70,
0075 SM_72,
0076 SM_75,
0077 SM_80,
0078 SM_86,
0079 SM_87,
0080 SM_89,
0081 SM_90,
0082 SM_90a,
0083 SM_100,
0084 SM_100a,
0085 SM_101,
0086 SM_101a,
0087 SM_120,
0088 SM_120a,
0089 GFX600,
0090 GFX601,
0091 GFX602,
0092 GFX700,
0093 GFX701,
0094 GFX702,
0095 GFX703,
0096 GFX704,
0097 GFX705,
0098 GFX801,
0099 GFX802,
0100 GFX803,
0101 GFX805,
0102 GFX810,
0103 GFX9_GENERIC,
0104 GFX900,
0105 GFX902,
0106 GFX904,
0107 GFX906,
0108 GFX908,
0109 GFX909,
0110 GFX90a,
0111 GFX90c,
0112 GFX9_4_GENERIC,
0113 GFX940,
0114 GFX941,
0115 GFX942,
0116 GFX950,
0117 GFX10_1_GENERIC,
0118 GFX1010,
0119 GFX1011,
0120 GFX1012,
0121 GFX1013,
0122 GFX10_3_GENERIC,
0123 GFX1030,
0124 GFX1031,
0125 GFX1032,
0126 GFX1033,
0127 GFX1034,
0128 GFX1035,
0129 GFX1036,
0130 GFX11_GENERIC,
0131 GFX1100,
0132 GFX1101,
0133 GFX1102,
0134 GFX1103,
0135 GFX1150,
0136 GFX1151,
0137 GFX1152,
0138 GFX1153,
0139 GFX12_GENERIC,
0140 GFX1200,
0141 GFX1201,
0142 AMDGCNSPIRV,
0143 Generic,
0144
0145 LAST,
0146
0147 CudaDefault = OffloadArch::SM_52,
0148 HIPDefault = OffloadArch::GFX906,
0149 };
0150
0151 enum class CUDAFunctionTarget {
0152 Device,
0153 Global,
0154 Host,
0155 HostDevice,
0156 InvalidTarget
0157 };
0158
0159 static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
0160 return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
0161 }
0162
0163 static inline bool IsAMDOffloadArch(OffloadArch A) {
0164
0165 return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
0166 }
0167
0168 const char *OffloadArchToString(OffloadArch A);
0169 const char *OffloadArchToVirtualArchString(OffloadArch A);
0170
0171
0172 OffloadArch StringToOffloadArch(llvm::StringRef S);
0173
0174
0175 CudaVersion MinVersionForOffloadArch(OffloadArch A);
0176
0177
0178 CudaVersion MaxVersionForOffloadArch(OffloadArch A);
0179
0180
0181 enum class CudaFeature {
0182
0183 CUDA_USES_NEW_LAUNCH,
0184
0185 CUDA_USES_FATBIN_REGISTER_END,
0186 };
0187
0188 CudaVersion ToCudaVersion(llvm::VersionTuple);
0189 bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature);
0190 bool CudaFeatureEnabled(CudaVersion, CudaFeature);
0191
0192 }
0193
0194 #endif