mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-13 22:00:14 +00:00
[Profile] Do not assign counters to functions without bodies
The root cause of the issues reported in D32406 and D34680 is that clang instruments functions without bodies. Make it stop doing that, and also teach it how to use old (incorrectly generated) profiles without crashing. llvm-svn: 306883
This commit is contained in:
parent
c4ad413853
commit
33d0a1ccd3
@ -617,6 +617,9 @@ uint64_t PGOHash::finalize() {
|
||||
|
||||
void CodeGenPGO::assignRegionCounters(GlobalDecl GD, llvm::Function *Fn) {
|
||||
const Decl *D = GD.getDecl();
|
||||
if (!D->hasBody())
|
||||
return;
|
||||
|
||||
bool InstrumentRegions = CGM.getCodeGenOpts().hasProfileClangInstr();
|
||||
llvm::IndexedInstrProfReader *PGOReader = CGM.getPGOReader();
|
||||
if (!InstrumentRegions && !PGOReader)
|
||||
|
9
clang/test/Profile/Inputs/cxx-missing-bodies.proftext
Normal file
9
clang/test/Profile/Inputs/cxx-missing-bodies.proftext
Normal file
@ -0,0 +1,9 @@
|
||||
??_GA@@UAEPAXI@Z
|
||||
1
|
||||
1
|
||||
1
|
||||
|
||||
??_DA@@QAEXXZ
|
||||
1
|
||||
1
|
||||
1
|
21
clang/test/Profile/cxx-missing-bodies.cpp
Normal file
21
clang/test/Profile/cxx-missing-bodies.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
// RUN: %clang_cc1 -emit-llvm %s -std=c++11 -S -emit-llvm -o - -triple=i386-pc-win32 -fno-rtti -fprofile-instrument=clang | FileCheck %s --check-prefix=GEN
|
||||
//
|
||||
// Don't crash when presented profile data for functions without bodies:
|
||||
// RUN: llvm-profdata merge %S/Inputs/cxx-missing-bodies.proftext -o %t.profdata
|
||||
// RUN: %clang_cc1 -emit-llvm %s -std=c++11 -S -emit-llvm -o /dev/null -triple=i386-pc-win32 -fno-rtti -fprofile-instrument-use-path=%t.profdata -w
|
||||
|
||||
// GEN-NOT: __profn{{.*}}??_GA@@UAEPAXI@Z
|
||||
// GEN-NOT: __profn{{.*}}??_DA@@QAEXXZ
|
||||
|
||||
struct A {
|
||||
virtual ~A();
|
||||
};
|
||||
struct B : A {
|
||||
virtual ~B();
|
||||
};
|
||||
|
||||
B::~B() {}
|
||||
|
||||
void foo() {
|
||||
B c;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user