diff options
Diffstat (limited to 'clang/lib/Driver/ToolChains/Cuda.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains/Cuda.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 1f0b478..fdfcea8 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -549,22 +549,16 @@ void NVPTX::FatBinary::ConstructJob(Compilation &C, const JobAction &JA, auto *A = II.getAction(); assert(A->getInputs().size() == 1 && "Device offload action is expected to have a single input"); - const char *gpu_arch_str = A->getOffloadingArch(); - assert(gpu_arch_str && + StringRef GpuArch = A->getOffloadingArch(); + assert(!GpuArch.empty() && "Device action expected to have associated a GPU architecture!"); - OffloadArch gpu_arch = StringToOffloadArch(gpu_arch_str); - if (II.getType() == types::TY_PP_Asm && - !shouldIncludePTX(Args, gpu_arch_str)) + if (II.getType() == types::TY_PP_Asm && !shouldIncludePTX(Args, GpuArch)) continue; - // We need to pass an Arch of the form "sm_XX" for cubin files and - // "compute_XX" for ptx. - const char *Arch = (II.getType() == types::TY_PP_Asm) - ? OffloadArchToVirtualArchString(gpu_arch) - : gpu_arch_str; - CmdArgs.push_back( - Args.MakeArgString(llvm::Twine("--image=profile=") + Arch + - ",file=" + getToolChain().getInputFilename(II))); + StringRef Kind = (II.getType() == types::TY_PP_Asm) ? "ptx" : "elf"; + CmdArgs.push_back(Args.MakeArgString( + "--image3=kind=" + Kind + ",sm=" + GpuArch.drop_front(3) + + ",file=" + getToolChain().getInputFilename(II))); } for (const auto &A : Args.getAllArgValues(options::OPT_Xcuda_fatbinary)) |