aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/ToolChains/Cuda.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Driver/ToolChains/Cuda.cpp')
-rw-r--r--clang/lib/Driver/ToolChains/Cuda.cpp20
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))