forked from OSchip/llvm-project
[llvm-profgen] Fix bug of populating profile symbol list
Previous implementation of populating profile symbol list is wrong, it only included the profiled symbols. Actually it should use all symbols, here this switches to use the symbols from debug info. Also turned the flag off by default. Reviewed By: wenlei, hoy Differential Revision: https://reviews.llvm.org/D111824
This commit is contained in:
parent
40ca411251
commit
2f8196db92
|
@ -11,6 +11,7 @@
|
||||||
; CHECK-SYM-LIST: Dump profile symbol list
|
; CHECK-SYM-LIST: Dump profile symbol list
|
||||||
; CHECK-SYM-LIST: bar
|
; CHECK-SYM-LIST: bar
|
||||||
; CHECK-SYM-LIST: foo
|
; CHECK-SYM-LIST: foo
|
||||||
|
; CHECK-SYM-LIST: main
|
||||||
|
|
||||||
; CHECK:[main:1 @ foo]:225:0
|
; CHECK:[main:1 @ foo]:225:0
|
||||||
; CHECK: 2.1: 14
|
; CHECK: 2.1: 14
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
; RUN: llvm-profgen --format=text --unsymbolized-profile=%t --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t1 --use-offset=0
|
; RUN: llvm-profgen --format=text --unsymbolized-profile=%t --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t1 --use-offset=0
|
||||||
; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK
|
; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK
|
||||||
|
|
||||||
; RUN: llvm-profgen --format=extbinary --perfscript=%S/Inputs/inline-noprobe2.perfscript --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t
|
; RUN: llvm-profgen --format=extbinary --perfscript=%S/Inputs/inline-noprobe2.perfscript --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t --populate-profile-symbol-list=1
|
||||||
; RUN: llvm-profdata show -show-prof-sym-list -sample %t | FileCheck %s --check-prefix=CHECK-SYM-LIST
|
; RUN: llvm-profdata show -show-prof-sym-list -sample %t | FileCheck %s --check-prefix=CHECK-SYM-LIST
|
||||||
|
|
||||||
; CHECK-ARTIFICIAL-BRANCH: 3
|
; CHECK-ARTIFICIAL-BRANCH: 3
|
||||||
|
@ -21,6 +21,7 @@
|
||||||
; CHECK-SYM-LIST: partition_pivot_first
|
; CHECK-SYM-LIST: partition_pivot_first
|
||||||
; CHECK-SYM-LIST: partition_pivot_last
|
; CHECK-SYM-LIST: partition_pivot_last
|
||||||
; CHECK-SYM-LIST: quick_sort
|
; CHECK-SYM-LIST: quick_sort
|
||||||
|
; CHECK-SYM-LIST: swap
|
||||||
|
|
||||||
|
|
||||||
;CHECK-RAW-PROFILE-NOT: 7f7448e889e4
|
;CHECK-RAW-PROFILE-NOT: 7f7448e889e4
|
||||||
|
|
|
@ -33,7 +33,7 @@ cl::opt<bool> UseMD5(
|
||||||
"meaningful for -extbinary)"));
|
"meaningful for -extbinary)"));
|
||||||
|
|
||||||
static cl::opt<bool> PopulateProfileSymbolList(
|
static cl::opt<bool> PopulateProfileSymbolList(
|
||||||
"populate-profile-symbol-list", cl::init(true), cl::Hidden,
|
"populate-profile-symbol-list", cl::init(false), cl::Hidden,
|
||||||
cl::desc("Populate profile symbol list (only meaningful for -extbinary)"));
|
cl::desc("Populate profile symbol list (only meaningful for -extbinary)"));
|
||||||
|
|
||||||
static cl::opt<int32_t, true> RecursionCompression(
|
static cl::opt<int32_t, true> RecursionCompression(
|
||||||
|
@ -97,16 +97,8 @@ void ProfileGeneratorBase::write(std::unique_ptr<SampleProfileWriter> Writer,
|
||||||
// Populate profile symbol list if extended binary format is used.
|
// Populate profile symbol list if extended binary format is used.
|
||||||
ProfileSymbolList SymbolList;
|
ProfileSymbolList SymbolList;
|
||||||
|
|
||||||
// Turn it off temporarily for CS profile.
|
|
||||||
if (FunctionSamples::ProfileIsCS &&
|
|
||||||
!PopulateProfileSymbolList.getNumOccurrences())
|
|
||||||
PopulateProfileSymbolList = false;
|
|
||||||
|
|
||||||
if (PopulateProfileSymbolList && OutputFormat == SPF_Ext_Binary) {
|
if (PopulateProfileSymbolList && OutputFormat == SPF_Ext_Binary) {
|
||||||
for (const auto &Item : ProfileMap) {
|
Binary->populateSymbolListFromDWARF(SymbolList);
|
||||||
auto &Profile = Item.second;
|
|
||||||
SymbolList.add(Profile.getName(), true);
|
|
||||||
}
|
|
||||||
Writer->setProfileSymbolList(&SymbolList);
|
Writer->setProfileSymbolList(&SymbolList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "ErrorHandling.h"
|
#include "ErrorHandling.h"
|
||||||
#include "ProfileGenerator.h"
|
#include "ProfileGenerator.h"
|
||||||
#include "llvm/ADT/Triple.h"
|
#include "llvm/ADT/Triple.h"
|
||||||
|
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
|
||||||
#include "llvm/Demangle/Demangle.h"
|
#include "llvm/Demangle/Demangle.h"
|
||||||
#include "llvm/IR/DebugInfoMetadata.h"
|
#include "llvm/IR/DebugInfoMetadata.h"
|
||||||
#include "llvm/MC/TargetRegistry.h"
|
#include "llvm/MC/TargetRegistry.h"
|
||||||
|
@ -599,6 +600,12 @@ void ProfiledBinary::loadSymbolsFromDWARF(ObjectFile &Obj) {
|
||||||
assert(!StartOffset2FuncRangeMap.empty() && "Misssing debug info.");
|
assert(!StartOffset2FuncRangeMap.empty() && "Misssing debug info.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProfiledBinary::populateSymbolListFromDWARF(
|
||||||
|
ProfileSymbolList &SymbolList) {
|
||||||
|
for (auto &I : StartOffset2FuncRangeMap)
|
||||||
|
SymbolList.add(I.second.getFuncName());
|
||||||
|
}
|
||||||
|
|
||||||
void ProfiledBinary::setupSymbolizer() {
|
void ProfiledBinary::setupSymbolizer() {
|
||||||
symbolize::LLVMSymbolizer::Options SymbolizerOpts;
|
symbolize::LLVMSymbolizer::Options SymbolizerOpts;
|
||||||
SymbolizerOpts.PrintFunctions =
|
SymbolizerOpts.PrintFunctions =
|
||||||
|
|
|
@ -382,6 +382,9 @@ public:
|
||||||
return FuncSizeTracker.getFuncSizeForContext(Context);
|
return FuncSizeTracker.getFuncSizeForContext(Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load the symbols from debug table and populate into symbol list.
|
||||||
|
void populateSymbolListFromDWARF(ProfileSymbolList &SymbolList);
|
||||||
|
|
||||||
const SampleContextFrameVector &
|
const SampleContextFrameVector &
|
||||||
getFrameLocationStack(uint64_t Offset, bool UseProbeDiscriminator = false) {
|
getFrameLocationStack(uint64_t Offset, bool UseProbeDiscriminator = false) {
|
||||||
auto I = Offset2LocStackMap.emplace(Offset, SampleContextFrameVector());
|
auto I = Offset2LocStackMap.emplace(Offset, SampleContextFrameVector());
|
||||||
|
|
Loading…
Reference in New Issue