[clang] 3f33e6b - [LinkerWrapper] Output a temp file with the wrapper bitcode
Joseph Huber via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 6 10:34:26 PST 2023
Author: Joseph Huber
Date: 2023-02-06T12:34:00-06:00
New Revision: 3f33e6b1f4d08dd3e4dec91ae4d8e4cf292f0acc
URL: https://github.com/llvm/llvm-project/commit/3f33e6b1f4d08dd3e4dec91ae4d8e4cf292f0acc
DIFF: https://github.com/llvm/llvm-project/commit/3f33e6b1f4d08dd3e4dec91ae4d8e4cf292f0acc.diff
LOG: [LinkerWrapper] Output a temp file with the wrapper bitcode
Summary:
The wrapper bitcode currently only gets a temp file for the compiled
object. This makes it more difficult to see what was actually generated.
Added:
Modified:
clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
Removed:
################################################################################
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 8779042f81fde..75266de67fd14 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -867,6 +867,19 @@ wrapDeviceImages(ArrayRef<std::unique_ptr<MemoryBuffer>> Buffers,
if (Args.hasArg(OPT_print_wrapped_module))
errs() << M;
+ if (Args.hasArg(OPT_save_temps)) {
+ int FD = -1;
+ auto TempFileOrErr =
+ createOutputFile(sys::path::filename(ExecutableName) + "." +
+ getOffloadKindName(Kind) + ".image.wrapper",
+ "bc");
+ if (!TempFileOrErr)
+ return TempFileOrErr.takeError();
+ if (std::error_code EC = sys::fs::openFileForWrite(*TempFileOrErr, FD))
+ return errorCodeToError(EC);
+ llvm::raw_fd_ostream OS(FD, true);
+ WriteBitcodeToFile(M, OS);
+ }
auto FileOrErr = compileModule(M);
if (!FileOrErr)
@@ -1059,8 +1072,10 @@ linkAndWrapDeviceFiles(SmallVectorImpl<OffloadFile> &LinkerInputFiles,
TheImage.TheImageKind =
Args.hasArg(OPT_embed_bitcode) ? IMG_Bitcode : IMG_Object;
TheImage.TheOffloadKind = Kind;
- TheImage.StringData["triple"] = Args.MakeArgString(LinkerArgs.getLastArgValue(OPT_triple_EQ));
- TheImage.StringData["arch"] = Args.MakeArgString(LinkerArgs.getLastArgValue(OPT_arch_EQ));
+ TheImage.StringData["triple"] =
+ Args.MakeArgString(LinkerArgs.getLastArgValue(OPT_triple_EQ));
+ TheImage.StringData["arch"] =
+ Args.MakeArgString(LinkerArgs.getLastArgValue(OPT_arch_EQ));
TheImage.Image = std::move(*FileOrErr);
Images[Kind].emplace_back(std::move(TheImage));
More information about the cfe-commits
mailing list