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)); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits