Index: clang/include/clang/Basic/Cuda.h =================================================================== --- clang/include/clang/Basic/Cuda.h +++ clang/include/clang/Basic/Cuda.h @@ -29,7 +29,8 @@ CUDA_101, CUDA_102, CUDA_110, - LATEST = CUDA_110, + CUDA_111, + LATEST = CUDA_111, LATEST_SUPPORTED = CUDA_101, }; const char *CudaVersionToString(CudaVersion V); @@ -54,6 +55,7 @@ SM_72, SM_75, SM_80, + SM_86, GFX600, GFX601, GFX700, Index: clang/lib/Basic/Cuda.cpp =================================================================== --- clang/lib/Basic/Cuda.cpp +++ clang/lib/Basic/Cuda.cpp @@ -32,6 +32,8 @@ return "10.2"; case CudaVersion::CUDA_110: return "11.0"; + case CudaVersion::CUDA_111: + return "11.1"; } llvm_unreachable("invalid enum"); } @@ -48,6 +50,7 @@ .Case("10.1", CudaVersion::CUDA_101) .Case("10.2", CudaVersion::CUDA_102) .Case("11.0", CudaVersion::CUDA_110) + .Case("11.1", CudaVersion::CUDA_111) .Default(CudaVersion::UNKNOWN); } @@ -149,6 +152,8 @@ return CudaVersion::CUDA_100; case CudaArch::SM_80: return CudaVersion::CUDA_110; + case CudaArch::SM_86: + return CudaVersion::CUDA_111; default: llvm_unreachable("invalid enum"); } @@ -194,6 +199,8 @@ return CudaVersion::CUDA_102; case 110: return CudaVersion::CUDA_110; + case 111: + return CudaVersion::CUDA_111; default: return CudaVersion::UNKNOWN; } Index: clang/lib/Basic/Targets/NVPTX.cpp =================================================================== --- clang/lib/Basic/Targets/NVPTX.cpp +++ clang/lib/Basic/Targets/NVPTX.cpp @@ -45,6 +45,7 @@ if (!Feature.startswith("+ptx")) continue; PTXVersion = llvm::StringSwitch(Feature) + .Case("+ptx71", 71) .Case("+ptx70", 70) .Case("+ptx65", 65) .Case("+ptx64", 64) @@ -239,6 +240,8 @@ return "750"; case CudaArch::SM_80: return "800"; + case CudaArch::SM_86: + return "860"; } llvm_unreachable("unhandled CudaArch"); }(); Index: clang/lib/Driver/ToolChains/Cuda.cpp =================================================================== --- clang/lib/Driver/ToolChains/Cuda.cpp +++ clang/lib/Driver/ToolChains/Cuda.cpp @@ -155,9 +155,9 @@ llvm::ErrorOr> VersionFile = FS.getBufferForFile(InstallPath + "/version.txt"); if (!VersionFile) { - // CUDA 7.0 doesn't have a version.txt, so guess that's our version if - // version.txt isn't present. - Version = CudaVersion::CUDA_70; + // CUDA 7.0 and 11.1 don't have a version.txt, so try to guess + // if version.txt isn't present. + Version = CudaVersion::CUDA_111; } else { ParseCudaVersionFile((*VersionFile)->getBuffer()); } @@ -658,6 +658,9 @@ // back-end. const char *PtxFeature = nullptr; switch (CudaInstallation.version()) { + case CudaVersion::CUDA_111: + PtxFeature = "+ptx71"; + break; case CudaVersion::CUDA_110: PtxFeature = "+ptx70"; break;