@@ -180,7 +180,7 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts,
180180
181181 if (Opts.CUDAIsDevice || Opts.OpenMPIsTargetDevice || !HostTarget) {
182182 // Set __CUDA_ARCH__ for the GPU specified.
183- std::string CUDAArchCode = [this ] {
183+ llvm::StringRef CUDAArchCode = [this ] {
184184 switch (GPU) {
185185 case OffloadArch::GFX600:
186186 case OffloadArch::GFX601:
@@ -285,12 +285,27 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts,
285285 return " 900" ;
286286 case OffloadArch::SM_100:
287287 return " 1000" ;
288+ case OffloadArch::SM_101:
289+ case OffloadArch::SM_101a:
290+ return " 1010" ;
291+ case OffloadArch::SM_120:
292+ case OffloadArch::SM_120a:
293+ return " 1200" ;
288294 }
289295 llvm_unreachable (" unhandled OffloadArch" );
290296 }();
291297 Builder.defineMacro (" __CUDA_ARCH__" , CUDAArchCode);
292- if (GPU == OffloadArch::SM_90a)
293- Builder.defineMacro (" __CUDA_ARCH_FEAT_SM90_ALL" , " 1" );
298+ switch (GPU) {
299+ case OffloadArch::SM_90a:
300+ case OffloadArch::SM_100a:
301+ case OffloadArch::SM_101a:
302+ case OffloadArch::SM_120a:
303+ Builder.defineMacro (" __CUDA_ARCH_FEAT_SM" + CUDAArchCode.drop_back () + " _ALL" , " 1" );
304+ break ;
305+ default :
306+ // Do nothing if this is not an enhanced architecture.
307+ break ;
308+ }
294309 }
295310}
296311
0 commit comments