[llvm] [BOLT] Add sink block to flow CFG in profile inference (PR #95047)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 12 13:39:00 PDT 2024
================
@@ -309,23 +309,28 @@ createFlowFunction(const BinaryFunction::BasicBlockOrderType &BlockOrder) {
FlowFunction Func;
// Add a special "dummy" source so that there is always a unique entry point.
- // Because of the extra source, for all other blocks in FlowFunction it holds
- // that Block.Index == BB->getIndex() + 1
FlowBlock EntryBlock;
EntryBlock.Index = 0;
Func.Blocks.push_back(EntryBlock);
- // Create FlowBlock for every basic block in the binary function
+ // Create FlowBlock for every basic block in the binary function.
for (const BinaryBasicBlock *BB : BlockOrder) {
Func.Blocks.emplace_back();
FlowBlock &Block = Func.Blocks.back();
Block.Index = Func.Blocks.size() - 1;
+ Block.IsExit = BB->successors().empty();
(void)BB;
assert(Block.Index == BB->getIndex() + 1 &&
"incorrectly assigned basic block index");
}
- // Create FlowJump for each jump between basic blocks in the binary function
+ // Add a special "dummy" sink block so there is always a unique sink.
----------------
WenleiHe wrote:
I notice there is always special entry block, so there is precedence. But I'm still wondering whether this should be handled inside profi instead? Like alternatively, adding artificial entry/sink can be done inside profi as needed, so this is all transparent to the users of profi.
https://github.com/llvm/llvm-project/pull/95047
More information about the llvm-commits
mailing list