diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 6ee73aa3c96fe..07137e75c9f88 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -587,6 +587,7 @@ CUDA/HIP Language Changes CUDA Support ^^^^^^^^^^^^ +- Clang now supports CUDA SDK up to 12.1 AIX Support ^^^^^^^^^^^ diff --git a/clang/include/clang/Basic/BuiltinsNVPTX.def b/clang/include/clang/Basic/BuiltinsNVPTX.def index 9179fa47eb690..f678f935c5d65 100644 --- a/clang/include/clang/Basic/BuiltinsNVPTX.def +++ b/clang/include/clang/Basic/BuiltinsNVPTX.def @@ -54,7 +54,11 @@ #pragma push_macro("PTX76") #pragma push_macro("PTX77") #pragma push_macro("PTX78") -#define PTX78 "ptx78" +#pragma push_macro("PTX80") +#pragma push_macro("PTX81") +#define PTX81 "ptx81" +#define PTX80 "ptx80|" PTX81 +#define PTX78 "ptx78|" PTX80 #define PTX77 "ptx77|" PTX78 #define PTX76 "ptx76|" PTX77 #define PTX75 "ptx75|" PTX76 @@ -1012,3 +1016,5 @@ TARGET_BUILTIN(__nvvm_neg_bf16x2, "ZUiZUi", "", AND(SM_80,PTX70)) #pragma pop_macro("PTX76") #pragma pop_macro("PTX77") #pragma pop_macro("PTX78") +#pragma pop_macro("PTX80") +#pragma pop_macro("PTX81") diff --git a/clang/include/clang/Basic/Cuda.h b/clang/include/clang/Basic/Cuda.h index 2b8fc2a0bb1c3..aeaf62073eaaf 100644 --- a/clang/include/clang/Basic/Cuda.h +++ b/clang/include/clang/Basic/Cuda.h @@ -37,9 +37,11 @@ enum class CudaVersion { CUDA_116, CUDA_117, CUDA_118, - FULLY_SUPPORTED = CUDA_115, + CUDA_120, + CUDA_121, + FULLY_SUPPORTED = CUDA_118, PARTIALLY_SUPPORTED = - CUDA_118, // Partially supported. Proceed with a warning. + CUDA_121, // Partially supported. Proceed with a warning. NEW = 10000, // Too new. Issue a warning, but allow using it. }; const char *CudaVersionToString(CudaVersion V); diff --git a/clang/lib/Basic/Cuda.cpp b/clang/lib/Basic/Cuda.cpp index db30142ad866d..7299b9f485ec2 100644 --- a/clang/lib/Basic/Cuda.cpp +++ b/clang/lib/Basic/Cuda.cpp @@ -37,6 +37,8 @@ static const CudaVersionMapEntry CudaNameVersionMap[] = { CUDA_ENTRY(11, 6), CUDA_ENTRY(11, 7), CUDA_ENTRY(11, 8), + CUDA_ENTRY(12, 0), + CUDA_ENTRY(12, 1), {"", CudaVersion::NEW, llvm::VersionTuple(std::numeric_limits::max())}, {"unknown", CudaVersion::UNKNOWN, {}} // End of list tombstone. }; diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index eae5ebdc192b2..2862ef462ddf5 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -74,6 +74,10 @@ CudaVersion getCudaVersion(uint32_t raw_version) { return CudaVersion::CUDA_117; if (raw_version < 11090) return CudaVersion::CUDA_118; + if (raw_version < 12010) + return CudaVersion::CUDA_120; + if (raw_version < 12020) + return CudaVersion::CUDA_121; return CudaVersion::NEW; } @@ -668,6 +672,8 @@ void NVPTX::getNVPTXTargetFeatures(const Driver &D, const llvm::Triple &Triple, case CudaVersion::CUDA_##CUDA_VER: \ PtxFeature = "+ptx" #PTX_VER; \ break; + CASE_CUDA_VERSION(121, 81); + CASE_CUDA_VERSION(120, 80); CASE_CUDA_VERSION(118, 78); CASE_CUDA_VERSION(117, 77); CASE_CUDA_VERSION(116, 76); diff --git a/llvm/lib/Target/NVPTX/NVPTX.td b/llvm/lib/Target/NVPTX/NVPTX.td index 4d4203c503768..f867c53118142 100644 --- a/llvm/lib/Target/NVPTX/NVPTX.td +++ b/llvm/lib/Target/NVPTX/NVPTX.td @@ -24,89 +24,22 @@ include "NVPTXInstrInfo.td" // TableGen in NVPTXGenSubtarget.inc. //===----------------------------------------------------------------------===// -// SM Versions -def SM20 : SubtargetFeature<"sm_20", "SmVersion", "20", - "Target SM 2.0">; -def SM21 : SubtargetFeature<"sm_21", "SmVersion", "21", - "Target SM 2.1">; -def SM30 : SubtargetFeature<"sm_30", "SmVersion", "30", - "Target SM 3.0">; -def SM32 : SubtargetFeature<"sm_32", "SmVersion", "32", - "Target SM 3.2">; -def SM35 : SubtargetFeature<"sm_35", "SmVersion", "35", - "Target SM 3.5">; -def SM37 : SubtargetFeature<"sm_37", "SmVersion", "37", - "Target SM 3.7">; -def SM50 : SubtargetFeature<"sm_50", "SmVersion", "50", - "Target SM 5.0">; -def SM52 : SubtargetFeature<"sm_52", "SmVersion", "52", - "Target SM 5.2">; -def SM53 : SubtargetFeature<"sm_53", "SmVersion", "53", - "Target SM 5.3">; -def SM60 : SubtargetFeature<"sm_60", "SmVersion", "60", - "Target SM 6.0">; -def SM61 : SubtargetFeature<"sm_61", "SmVersion", "61", - "Target SM 6.1">; -def SM62 : SubtargetFeature<"sm_62", "SmVersion", "62", - "Target SM 6.2">; -def SM70 : SubtargetFeature<"sm_70", "SmVersion", "70", - "Target SM 7.0">; -def SM72 : SubtargetFeature<"sm_72", "SmVersion", "72", - "Target SM 7.2">; -def SM75 : SubtargetFeature<"sm_75", "SmVersion", "75", - "Target SM 7.5">; -def SM80 : SubtargetFeature<"sm_80", "SmVersion", "80", - "Target SM 8.0">; -def SM86 : SubtargetFeature<"sm_86", "SmVersion", "86", - "Target SM 8.6">; -def SM87 : SubtargetFeature<"sm_87", "SmVersion", "87", - "Target SM 8.7">; -def SM89 : SubtargetFeature<"sm_89", "SmVersion", "89", - "Target SM 8.9">; -def SM90 : SubtargetFeature<"sm_90", "SmVersion", "90", - "Target SM 9.0">; +class FeatureSM: + SubtargetFeature<"sm_"# version, "SmVersion", + "" # version, + "Target SM " # version>; +class FeaturePTX: + SubtargetFeature<"ptx"# version, "PTXVersion", + "" # version, + "Use PTX version " # version>; -// PTX Versions -def PTX32 : SubtargetFeature<"ptx32", "PTXVersion", "32", - "Use PTX version 3.2">; -def PTX40 : SubtargetFeature<"ptx40", "PTXVersion", "40", - "Use PTX version 4.0">; -def PTX41 : SubtargetFeature<"ptx41", "PTXVersion", "41", - "Use PTX version 4.1">; -def PTX42 : SubtargetFeature<"ptx42", "PTXVersion", "42", - "Use PTX version 4.2">; -def PTX43 : SubtargetFeature<"ptx43", "PTXVersion", "43", - "Use PTX version 4.3">; -def PTX50 : SubtargetFeature<"ptx50", "PTXVersion", "50", - "Use PTX version 5.0">; -def PTX60 : SubtargetFeature<"ptx60", "PTXVersion", "60", - "Use PTX version 6.0">; -def PTX61 : SubtargetFeature<"ptx61", "PTXVersion", "61", - "Use PTX version 6.1">; -def PTX63 : SubtargetFeature<"ptx63", "PTXVersion", "63", - "Use PTX version 6.3">; -def PTX64 : SubtargetFeature<"ptx64", "PTXVersion", "64", - "Use PTX version 6.4">; -def PTX65 : SubtargetFeature<"ptx65", "PTXVersion", "65", - "Use PTX version 6.5">; -def PTX70 : SubtargetFeature<"ptx70", "PTXVersion", "70", - "Use PTX version 7.0">; -def PTX71 : SubtargetFeature<"ptx71", "PTXVersion", "71", - "Use PTX version 7.1">; -def PTX72 : SubtargetFeature<"ptx72", "PTXVersion", "72", - "Use PTX version 7.2">; -def PTX73 : SubtargetFeature<"ptx73", "PTXVersion", "73", - "Use PTX version 7.3">; -def PTX74 : SubtargetFeature<"ptx74", "PTXVersion", "74", - "Use PTX version 7.4">; -def PTX75 : SubtargetFeature<"ptx75", "PTXVersion", "75", - "Use PTX version 7.5">; -def PTX76 : SubtargetFeature<"ptx76", "PTXVersion", "76", - "Use PTX version 7.6">; -def PTX77 : SubtargetFeature<"ptx77", "PTXVersion", "77", - "Use PTX version 7.7">; -def PTX78 : SubtargetFeature<"ptx78", "PTXVersion", "78", - "Use PTX version 7.8">; +foreach version = [20, 21, 30, 32, 35, 37, 50, 52, 53, + 60, 61, 62, 70, 72, 75, 80, 86, 87, 89, 90] in + def SM#version: FeatureSM; + +foreach version = [32, 40, 41, 42, 43, 50, 60, 61, 63, 64, 65, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81] in + def PTX#version: FeaturePTX; //===----------------------------------------------------------------------===// // NVPTX supported processors.