forked from OSchip/llvm-project
Pass -fprofile-sample-use to lto backends.
Summary: LTO backend will not invoke SampleProfileLoader pass even if -fprofile-sample-use is specified. This patch passes the flag down so that pass manager can add the SampleProfileLoader pass correctly. Reviewers: mehdi_amini, tejohnson Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D28588 llvm-svn: 291774
This commit is contained in:
parent
3d4cc68b8b
commit
bd3689de91
|
@ -862,7 +862,8 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(
|
||||||
}
|
}
|
||||||
|
|
||||||
static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,
|
static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,
|
||||||
std::unique_ptr<raw_pwrite_stream> OS) {
|
std::unique_ptr<raw_pwrite_stream> OS,
|
||||||
|
std::string SampleProfile) {
|
||||||
StringMap<std::map<GlobalValue::GUID, GlobalValueSummary *>>
|
StringMap<std::map<GlobalValue::GUID, GlobalValueSummary *>>
|
||||||
ModuleToDefinedGVSummaries;
|
ModuleToDefinedGVSummaries;
|
||||||
CombinedIndex->collectDefinedGVSummariesPerModule(ModuleToDefinedGVSummaries);
|
CombinedIndex->collectDefinedGVSummariesPerModule(ModuleToDefinedGVSummaries);
|
||||||
|
@ -930,6 +931,7 @@ static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,
|
||||||
return llvm::make_unique<lto::NativeObjectStream>(std::move(OS));
|
return llvm::make_unique<lto::NativeObjectStream>(std::move(OS));
|
||||||
};
|
};
|
||||||
lto::Config Conf;
|
lto::Config Conf;
|
||||||
|
Conf.SampleProfile = SampleProfile;
|
||||||
if (Error E = thinBackend(
|
if (Error E = thinBackend(
|
||||||
Conf, 0, AddStream, *M, *CombinedIndex, ImportList,
|
Conf, 0, AddStream, *M, *CombinedIndex, ImportList,
|
||||||
ModuleToDefinedGVSummaries[M->getModuleIdentifier()], ModuleMap)) {
|
ModuleToDefinedGVSummaries[M->getModuleIdentifier()], ModuleMap)) {
|
||||||
|
@ -965,7 +967,8 @@ void clang::EmitBackendOutput(DiagnosticsEngine &Diags,
|
||||||
// of an error).
|
// of an error).
|
||||||
bool DoThinLTOBackend = CombinedIndex != nullptr;
|
bool DoThinLTOBackend = CombinedIndex != nullptr;
|
||||||
if (DoThinLTOBackend) {
|
if (DoThinLTOBackend) {
|
||||||
runThinLTOBackend(CombinedIndex.get(), M, std::move(OS));
|
runThinLTOBackend(CombinedIndex.get(), M, std::move(OS),
|
||||||
|
CGOpts.SampleProfileFile);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
; RUN: not %clang_cc1 -O2 -o %t1.o -x c %s -c -fthinlto-index=%t.thinlto.bc 2>&1 | FileCheck %s -check-prefix=CHECK-WARNING
|
; RUN: not %clang_cc1 -O2 -o %t1.o -x c %s -c -fthinlto-index=%t.thinlto.bc 2>&1 | FileCheck %s -check-prefix=CHECK-WARNING
|
||||||
; CHECK-WARNING: error: invalid argument '-fthinlto-index={{.*}}' only allowed with '-x ir'
|
; CHECK-WARNING: error: invalid argument '-fthinlto-index={{.*}}' only allowed with '-x ir'
|
||||||
|
|
||||||
|
; Ensure sample profile pass are passed to backend
|
||||||
|
; RUN: %clang -O2 -o %t4.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -fprofile-sample-use=%S/Inputs/pgo-sample.prof -mllvm -debug-pass=Structure 2>&1 | FileCheck %s -check-prefix=CHECK-SAMPLEPGO
|
||||||
|
; CHECK-SAMPLEPGO: Sample profile pass
|
||||||
|
|
||||||
; Ensure we get expected error for missing index file
|
; Ensure we get expected error for missing index file
|
||||||
; RUN: %clang -O2 -o %t4.o -x ir %t1.o -c -fthinlto-index=bad.thinlto.bc 2>&1 | FileCheck %s -check-prefix=CHECK-ERROR1
|
; RUN: %clang -O2 -o %t4.o -x ir %t1.o -c -fthinlto-index=bad.thinlto.bc 2>&1 | FileCheck %s -check-prefix=CHECK-ERROR1
|
||||||
; CHECK-ERROR1: Error loading index file 'bad.thinlto.bc'
|
; CHECK-ERROR1: Error loading index file 'bad.thinlto.bc'
|
||||||
|
|
Loading…
Reference in New Issue