diff options
author | Teresa Johnson <tejohnson@google.com> | 2017-03-31 22:35:47 +0000 |
---|---|---|
committer | Teresa Johnson <tejohnson@google.com> | 2017-03-31 22:35:47 +0000 |
commit | b637cb07ede5f2266d3a651f9f671e3477dd496b (patch) | |
tree | c4e4ae853cdeb4d6fcb49e62864140b67dd9e9be /clang/lib/CodeGen/BackendUtil.cpp | |
parent | 47fd2de304d459736d313f74b17d5d2890518d08 (diff) | |
download | bcm5719-llvm-b637cb07ede5f2266d3a651f9f671e3477dd496b.tar.gz bcm5719-llvm-b637cb07ede5f2266d3a651f9f671e3477dd496b.zip |
[ThinLTO] Handle -emit-llvm* in ThinLTO backends
Summary:
Use PreCodeGenModuleHook to invoke the correct writer when emitting LLVM
IR, returning false to skip codegen from within thinBackend.
Reviewers: pcc, mehdi_amini
Subscribers: Prazek, cfe-commits
Differential Revision: https://reviews.llvm.org/D31534
llvm-svn: 299274
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 5982128888c..874fd140941 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -994,9 +994,30 @@ static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M, Conf.MAttrs = TOpts.Features; Conf.RelocModel = getRelocModel(CGOpts); Conf.CGOptLevel = getCGOptLevel(CGOpts); - Conf.CGFileType = getCodeGenFileType(Action); initTargetOptions(Conf.Options, CGOpts, TOpts, LOpts, HeaderOpts); Conf.SampleProfile = std::move(SampleProfile); + switch (Action) { + case Backend_EmitNothing: + Conf.PreCodeGenModuleHook = [](size_t Task, const Module &Mod) { + return false; + }; + break; + case Backend_EmitLL: + Conf.PreCodeGenModuleHook = [&](size_t Task, const Module &Mod) { + M->print(*OS, nullptr, CGOpts.EmitLLVMUseLists); + return false; + }; + break; + case Backend_EmitBC: + Conf.PreCodeGenModuleHook = [&](size_t Task, const Module &Mod) { + WriteBitcodeToFile(M, *OS, CGOpts.EmitLLVMUseLists); + return false; + }; + break; + default: + Conf.CGFileType = getCodeGenFileType(Action); + break; + } if (Error E = thinBackend( Conf, 0, AddStream, *M, *CombinedIndex, ImportList, ModuleToDefinedGVSummaries[M->getModuleIdentifier()], ModuleMap)) { |