[clang] 439ba4c - [LinkerWrapper] Improve -save-temps behaviour
Joseph Huber via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 12 14:43:57 PST 2023
Author: Joseph Huber
Date: 2023-01-12T16:43:30-06:00
New Revision: 439ba4c9026db6ab4c0a06737638ac42ebc445fd
URL: https://github.com/llvm/llvm-project/commit/439ba4c9026db6ab4c0a06737638ac42ebc445fd
DIFF: https://github.com/llvm/llvm-project/commit/439ba4c9026db6ab4c0a06737638ac42ebc445fd.diff
LOG: [LinkerWrapper] Improve -save-temps behaviour
Summary:
This patch changes around some of the names for the temp files we
generate. This also emits the `postlink` and `postopt` temp files. We
don't use the built-in save temps from LTO right now because it doesn't
give the ASM properly. We may be able to fix that in the future.
Added:
Modified:
clang/test/Driver/linker-wrapper.c
clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
Removed:
################################################################################
diff --git a/clang/test/Driver/linker-wrapper.c b/clang/test/Driver/linker-wrapper.c
index a313a629cae9e..08ccadd2d72b8 100644
--- a/clang/test/Driver/linker-wrapper.c
+++ b/clang/test/Driver/linker-wrapper.c
@@ -13,7 +13,7 @@
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=NVPTX-LINK
-// NVPTX-LINK: nvlink{{.*}}-m64 -o {{.*}}.out -arch sm_70 {{.*}}.o {{.*}}.o
+// NVPTX-LINK: nvlink{{.*}}-m64 -o {{.*}}.img -arch sm_70 {{.*}}.o {{.*}}.o
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.elf.o,kind=openmp,triple=nvptx64-nvidia-cuda,arch=sm_70 \
@@ -22,7 +22,7 @@
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=HOST-BC
-// HOST-BC: nvlink{{.*}}-m64 -o {{.*}}.out -arch sm_70 {{.*}}.o {{.*}}.o
+// HOST-BC: nvlink{{.*}}-m64 -o {{.*}}.img -arch sm_70 {{.*}}.o {{.*}}.o
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.elf.o,kind=openmp,triple=nvptx64-nvidia-cuda,arch=sm_70 \
@@ -31,7 +31,7 @@
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run --device-debug -O0 \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=NVPTX-LINK-DEBUG
-// NVPTX-LINK-DEBUG: nvlink{{.*}}-m64 -g -o {{.*}}.out -arch sm_70 {{.*}}.o {{.*}}.o
+// NVPTX-LINK-DEBUG: nvlink{{.*}}-m64 -g -o {{.*}}.img -arch sm_70 {{.*}}.o {{.*}}.o
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.nvptx.bc,kind=openmp,triple=nvptx64-nvidia-cuda,arch=sm_70 \
@@ -49,7 +49,7 @@
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=AMDGPU-LINK
-// AMDGPU-LINK: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.out {{.*}}.o {{.*}}.o
+// AMDGPU-LINK: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.img {{.*}}.o {{.*}}.o
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.amdgpu.bc,kind=openmp,triple=amdgcn-amd-amdhsa,arch=gfx1030 \
@@ -59,7 +59,7 @@
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=AMDGPU-LTO-TEMPS
// AMDGPU-LTO-TEMPS: clang" -o [[OBJ:.+]] -fPIC -c --target=amdgcn-amd-amdhsa -O2 -mcpu=gfx1030 {{.*}}.s
-// AMDGPU-LTO-TEMPS: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx1030 -o {{.*}}.out {{.*}}.o
+// AMDGPU-LTO-TEMPS: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx1030 -o {{.*}}.img {{.*}}.o
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.amdgpu.bc,kind=openmp,triple=amdgcn-amd-amdhsa,arch=gfx908 \
@@ -68,7 +68,7 @@
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=AMDGPU-LINK-LTO
-// AMDGPU-LINK-LTO: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.out {{.*}}.o
+// AMDGPU-LINK-LTO: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.img {{.*}}.o
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.elf.o,kind=openmp,triple=x86_64-unknown-linux-gnu \
@@ -77,7 +77,7 @@
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run \
// RUN: --linker-path=/usr/bin/ld.lld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=CPU-LINK
-// CPU-LINK: ld.lld{{.*}}-m elf_x86_64 -shared -Bsymbolic -o {{.*}}.out {{.*}}.o {{.*}}.o
+// CPU-LINK: ld.lld{{.*}}-m elf_x86_64 -shared -Bsymbolic -o {{.*}}.img {{.*}}.o {{.*}}.o
// RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t.o
// RUN: clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu -mllvm -openmp-opt-disable \
@@ -103,7 +103,7 @@
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=CUDA-OMP-LINK
-// CUDA-OMP-LINK: nvlink{{.*}}-m64 -o {{.*}}.out -arch sm_70 {{.*}}.o {{.*}}.o
+// CUDA-OMP-LINK: nvlink{{.*}}-m64 -o {{.*}}.img -arch sm_70 {{.*}}.o {{.*}}.o
// RUN: clang-offload-packager -o %t-lib.out \
// RUN: --image=file=%t.elf.o,kind=openmp,triple=nvptx64-nvidia-cuda,arch=sm_70 \
@@ -128,9 +128,9 @@
// RUN: clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=CUDA
-// CUDA: nvlink{{.*}}-m64 -o {{.*}}.out -arch sm_52 {{.*}}.o
-// CUDA: nvlink{{.*}}-m64 -o {{.*}}.out -arch sm_70 {{.*}}.o {{.*}}.o
-// CUDA: fatbinary{{.*}}-64 --create {{.*}}.fatbin --image=profile=sm_70,file={{.*}}.out --image=profile=sm_52,file={{.*}}.out
+// CUDA: nvlink{{.*}}-m64 -o {{.*}}.img -arch sm_52 {{.*}}.o
+// CUDA: nvlink{{.*}}-m64 -o {{.*}}.img -arch sm_70 {{.*}}.o {{.*}}.o
+// CUDA: fatbinary{{.*}}-64 --create {{.*}}.fatbin --image=profile=sm_70,file={{.*}}.img --image=profile=sm_52,file={{.*}}.img
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.elf.o,kind=cuda,triple=nvptx64-nvidia-cuda,arch=sm_80 \
@@ -153,9 +153,9 @@
// RUN: clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu \
// RUN: --linker-path=/usr/bin/ld -- %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=HIP
-// HIP: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.out {{.*}}.o
-// HIP: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx90a -o {{.*}}.out {{.*}}.o
-// HIP: clang-offload-bundler{{.*}}-type=o -bundle-align=4096 -targets=host-x86_64-unknown-linux,hipv4-amdgcn-amd-amdhsa--gfx90a,hipv4-amdgcn-amd-amdhsa--gfx908 -input=/dev/null -input={{.*}}.out -input={{.*}}out -output={{.*}}.hipfb
+// HIP: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.img {{.*}}.o
+// HIP: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx90a -o {{.*}}.img {{.*}}.o
+// HIP: clang-offload-bundler{{.*}}-type=o -bundle-align=4096 -targets=host-x86_64-unknown-linux,hipv4-amdgcn-amd-amdhsa--gfx90a,hipv4-amdgcn-amd-amdhsa--gfx908 -input=/dev/null -input={{.*}}.img -input={{.*}}.img -output={{.*}}.hipfb
// RUN: clang-offload-packager -o %t.out \
// RUN: --image=file=%t.elf.o,kind=openmp,triple=amdgcn-amd-amdhsa,arch=gfx908 \
@@ -166,8 +166,8 @@
// RUN: --linker-path=/usr/bin/ld --device-linker=a --device-linker=nvptx64-nvidia-cuda=b -- \
// RUN: %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=LINKER-ARGS
-// LINKER-ARGS: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.out {{.*}}.o a
-// LINKER-ARGS: nvlink{{.*}}-m64 -o {{.*}}.out -arch sm_70 {{.*}}.o a b
+// LINKER-ARGS: lld{{.*}}-flavor gnu --no-undefined -shared -plugin-opt=-amdgpu-internalize-symbols -plugin-opt=mcpu=gfx908 -o {{.*}}.img {{.*}}.o a
+// LINKER-ARGS: nvlink{{.*}}-m64 -o {{.*}}.img -arch sm_70 {{.*}}.o a b
// RUN: not clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu -ldummy \
// RUN: --linker-path=/usr/bin/ld --device-linker=a --device-linker=nvptx64-nvidia-cuda=b -- \
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 095033e0517ee..1fb4c83052c4a 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -327,9 +327,9 @@ Expected<StringRef> link(ArrayRef<StringRef> InputFiles, const ArgList &Args) {
// Create a new file to write the linked device image to.
auto TempFileOrErr =
- createOutputFile(sys::path::filename(ExecutableName) + "-device-" +
- Triple.getArchName() + "-" + Arch,
- "out");
+ createOutputFile(sys::path::filename(ExecutableName) + "." +
+ Triple.getArchName() + "." + Arch,
+ "img");
if (!TempFileOrErr)
return TempFileOrErr.takeError();
@@ -371,8 +371,8 @@ fatbinary(ArrayRef<std::pair<StringRef, StringRef>> InputFiles,
Args.getLastArgValue(OPT_host_triple_EQ, sys::getDefaultTargetTriple()));
// Create a new file to write the linked device image to.
- auto TempFileOrErr = createOutputFile(
- sys::path::filename(ExecutableName) + "-device", "fatbin");
+ auto TempFileOrErr =
+ createOutputFile(sys::path::filename(ExecutableName), "fatbin");
if (!TempFileOrErr)
return TempFileOrErr.takeError();
@@ -406,9 +406,9 @@ Expected<StringRef> link(ArrayRef<StringRef> InputFiles, const ArgList &Args) {
// Create a new file to write the linked device image to.
auto TempFileOrErr =
- createOutputFile(sys::path::filename(ExecutableName) + "-" +
- Triple.getArchName() + "-" + Arch,
- "out");
+ createOutputFile(sys::path::filename(ExecutableName) + "." +
+ Triple.getArchName() + "." + Arch,
+ "img");
if (!TempFileOrErr)
return TempFileOrErr.takeError();
std::string ArchArg = ("-plugin-opt=mcpu=" + Arch).str();
@@ -451,9 +451,8 @@ fatbinary(ArrayRef<std::pair<StringRef, StringRef>> InputFiles,
Args.getLastArgValue(OPT_host_triple_EQ, sys::getDefaultTargetTriple()));
// Create a new file to write the linked device image to.
- auto TempFileOrErr = createOutputFile(sys::path::filename(ExecutableName) +
- "-device-" + Triple.getArchName(),
- "hipfb");
+ auto TempFileOrErr =
+ createOutputFile(sys::path::filename(ExecutableName), "hipfb");
if (!TempFileOrErr)
return TempFileOrErr.takeError();
@@ -553,9 +552,9 @@ Expected<StringRef> link(ArrayRef<StringRef> InputFiles, const ArgList &Args) {
// Create a new file to write the linked device image to.
auto TempFileOrErr =
- createOutputFile(sys::path::filename(ExecutableName) + "-" +
- Triple.getArchName() + "-" + Arch,
- "out");
+ createOutputFile(sys::path::filename(ExecutableName) + "." +
+ Triple.getArchName() + "." + Arch,
+ "img");
if (!TempFileOrErr)
return TempFileOrErr.takeError();
@@ -706,12 +705,24 @@ std::unique_ptr<lto::LTO> createLTO(
Conf.PTO.SLPVectorization = Conf.OptLevel > 1;
if (SaveTemps) {
- std::string TempName = (sys::path::filename(ExecutableName) + "-device-" +
- Triple.getTriple() + "-" + Arch)
+ std::string TempName = (sys::path::filename(ExecutableName) + "." +
+ Triple.getTriple() + "." + Arch)
.str();
Conf.PostInternalizeModuleHook = [=](size_t Task, const Module &M) {
- std::string File = !Task ? TempName + ".bc"
- : TempName + "." + std::to_string(Task) + ".bc";
+ std::string File =
+ !Task ? TempName + ".postlink.bc"
+ : TempName + "." + std::to_string(Task) + ".postlink.bc";
+ error_code EC;
+ raw_fd_ostream LinkedBitcode(File, EC, sys::fs::OF_None);
+ if (EC)
+ reportError(errorCodeToError(EC));
+ WriteBitcodeToFile(M, LinkedBitcode);
+ return true;
+ };
+ Conf.PreCodeGenModuleHook = [=](size_t Task, const Module &M) {
+ std::string File =
+ !Task ? TempName + ".postopt.bc"
+ : TempName + "." + std::to_string(Task) + ".postopt.bc";
error_code EC;
raw_fd_ostream LinkedBitcode(File, EC, sys::fs::OF_None);
if (EC)
@@ -743,6 +754,7 @@ Error linkBitcodeFiles(SmallVectorImpl<OffloadFile> &InputFiles,
const ArgList &Args) {
llvm::TimeTraceScope TimeScope("Link bitcode files");
const llvm::Triple Triple(Args.getLastArgValue(OPT_triple_EQ));
+ StringRef Arch = Args.getLastArgValue(OPT_arch_EQ);
SmallVector<OffloadFile, 4> BitcodeInputFiles;
DenseSet<StringRef> UsedInRegularObj;
@@ -892,8 +904,8 @@ Error linkBitcodeFiles(SmallVectorImpl<OffloadFile> &InputFiles,
StringRef Extension = (Triple.isNVPTX() || SaveTemps) ? "s" : "o";
std::string TaskStr = Task ? "." + std::to_string(Task) : "";
auto TempFileOrErr =
- createOutputFile(sys::path::filename(ExecutableName) + "-device-" +
- Triple.getTriple() + TaskStr,
+ createOutputFile(sys::path::filename(ExecutableName) + "." +
+ Triple.getTriple() + "." + Arch + TaskStr,
Extension);
if (!TempFileOrErr)
reportError(TempFileOrErr.takeError());
@@ -986,8 +998,8 @@ Expected<StringRef> compileModule(Module &M) {
M.setDataLayout(TM->createDataLayout());
int FD = -1;
- auto TempFileOrErr =
- createOutputFile(sys::path::filename(ExecutableName) + "-wrapper", "o");
+ auto TempFileOrErr = createOutputFile(
+ sys::path::filename(ExecutableName) + ".image.wrapper", "o");
if (!TempFileOrErr)
return TempFileOrErr.takeError();
if (std::error_code EC = sys::fs::openFileForWrite(*TempFileOrErr, FD))
More information about the cfe-commits
mailing list