[BOLT] Fix jump table placement for non-simple functions

Summary:
When we move a jump table to either hot or cold new section
(-jump-tables=move), we rely on a number of taken branches from the table
to decide if it's hot or cold. However, if the function is non-simple, we
always get 0 count, and always move the table to the cold section.
Instead, we should make a conservative decision based on the execution
count of the function.

(cherry picked from FBD7058127)
This commit is contained in:
Maksim Panchenko 2018-02-22 11:20:46 -08:00
parent e15623058e
commit 6744f0dbeb
1 changed files with 8 additions and 2 deletions

View File

@ -3287,8 +3287,14 @@ void BinaryFunction::emitJumpTables(MCStreamer *Streamer) {
ELF::SHF_ALLOC);
ColdSection = HotSection;
} else {
HotSection = BC.MOFI->getReadOnlySection();
ColdSection = BC.MOFI->getReadOnlyColdSection();
if (isSimple()) {
HotSection = BC.MOFI->getReadOnlySection();
ColdSection = BC.MOFI->getReadOnlyColdSection();
} else {
HotSection = hasProfile() ? BC.MOFI->getReadOnlySection()
: BC.MOFI->getReadOnlyColdSection();
ColdSection = HotSection;
}
}
JT.emit(Streamer, HotSection, ColdSection);
}