aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/BackendUtil.cpp
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2017-03-23 19:47:49 +0000
committerTeresa Johnson <tejohnson@google.com>2017-03-23 19:47:49 +0000
commit488d1dc0edefb3b9852e1fd1ea579d585f7acec7 (patch)
tree2da3e5fadcfecd853b00fe5ae094bd2e7d0b3613 /clang/lib/CodeGen/BackendUtil.cpp
parent0c6a4ff8dcd32c00b1362d7dd902fe4d4160d642 (diff)
downloadllvm-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.cpp19
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));