diff options
author | Teresa Johnson <tejohnson@google.com> | 2017-03-23 19:47:49 +0000 |
---|---|---|
committer | Teresa Johnson <tejohnson@google.com> | 2017-03-23 19:47:49 +0000 |
commit | 488d1dc0edefb3b9852e1fd1ea579d585f7acec7 (patch) | |
tree | 2da3e5fadcfecd853b00fe5ae094bd2e7d0b3613 /clang/lib/CodeGen/BackendUtil.cpp | |
parent | 0c6a4ff8dcd32c00b1362d7dd902fe4d4160d642 (diff) | |
download | llvm-488d1dc0edefb3b9852e1fd1ea579d585f7acec7.zip llvm-488d1dc0edefb3b9852e1fd1ea579d585f7acec7.tar.gz llvm-488d1dc0edefb3b9852e1fd1ea579d585f7acec7.tar.bz2 |
[ThinLTO] Clang support for emitting minimized bitcode for thin link
Summary:
Clang companion patch to LLVM patch D31027, which adds support
for emitting minimized bitcode file for use in the thin link step.
Add a cc1 option -fthin-link-bitcode=<file> to trigger this behavior.
Depends on D31027.
Reviewers: mehdi_amini, pcc
Subscribers: cfe-commits, Prazek
Differential Revision: https://reviews.llvm.org/D31050
llvm-svn: 298639
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 35c31a0..35de1a45 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -686,13 +686,28 @@ void EmitAssemblyHelper::EmitAssembly(BackendAction Action, CodeGenPasses.add( createTargetTransformInfoWrapperPass(getTargetIRAnalysis())); + std::unique_ptr<raw_fd_ostream> ThinLinkOS; + switch (Action) { case Backend_EmitNothing: break; case Backend_EmitBC: - if (CodeGenOpts.EmitSummaryIndex) - PerModulePasses.add(createWriteThinLTOBitcodePass(*OS)); + if (CodeGenOpts.EmitSummaryIndex) { + if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) { + std::error_code EC; + ThinLinkOS.reset(new llvm::raw_fd_ostream( + CodeGenOpts.ThinLinkBitcodeFile, EC, + llvm::sys::fs::F_None)); + if (EC) { + Diags.Report(diag::err_fe_unable_to_open_output) << CodeGenOpts.ThinLinkBitcodeFile + << EC.message(); + return; + } + } + PerModulePasses.add( + createWriteThinLTOBitcodePass(*OS, ThinLinkOS.get())); + } else PerModulePasses.add( createBitcodeWriterPass(*OS, CodeGenOpts.EmitLLVMUseLists)); |