forked from OSchip/llvm-project
[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:
parent
e15623058e
commit
6744f0dbeb
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue