[BOLT] Add function layout class

This patch adds a dedicated class to keep track of each function's
layout. It also lays the groundwork for splitting functions into
multiple fragments (as opposed to a strict hot/cold split).

Reviewed By: maksfb

Differential Revision: https://reviews.llvm.org/D129518
This commit is contained in:
Fabian Parzefall
2022-07-16 17:23:21 -07:00
parent b7173553d7
commit 8477bc6761
33 changed files with 731 additions and 424 deletions

View File

@@ -70,7 +70,7 @@ void BoltAddressTranslation::write(raw_ostream &OS) {
<< Twine::utohexstr(Function.getOutputAddress()) << "\n");
MapTy Map;
const bool IsSplit = Function.isSplit();
for (BinaryBasicBlock *&BB : Function.layout()) {
for (const BinaryBasicBlock *BB : Function.getLayout().blocks()) {
if (IsSplit && BB->isCold())
break;
writeEntriesForBB(Map, *BB, Function.getOutputAddress());
@@ -83,7 +83,7 @@ void BoltAddressTranslation::write(raw_ostream &OS) {
// Cold map
Map.clear();
LLVM_DEBUG(dbgs() << " Cold part\n");
for (BinaryBasicBlock *&BB : Function.layout()) {
for (const BinaryBasicBlock *BB : Function.getLayout().blocks()) {
if (!BB->isCold())
continue;
writeEntriesForBB(Map, *BB, Function.cold().getAddress());