forked from OSchip/llvm-project
[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
This commit is contained in:
parent
47fd2de304
commit
b637cb07ed
|
@ -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)) {
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// Test to ensure -emit-llvm and -emit-llvm-bc work when invoking the
|
||||
// ThinLTO backend path.
|
||||
// RUN: %clang -O2 %s -flto=thin -c -o %t.o
|
||||
// RUN: llvm-lto -thinlto -o %t %t.o
|
||||
// RUN: %clang_cc1 -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -emit-llvm-bc -o - | llvm-dis -o - | FileCheck %s
|
||||
|
||||
// CHECK: define void @foo()
|
||||
void foo() {
|
||||
}
|
Loading…
Reference in New Issue