[llvm] [BOLT] Add sink block to flow CFG in profile inference (PR #95047)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 17 16:11:41 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:

Sounds good. Agreed that splitting the flow from invoke is more natural. 

Can you add a comment document this as a TODO, so we know why there is divergence in how we handle flow to landing pad? Otherwise this patch looks good. Also helpful to have a TODO comment for unlikely jump flag to communicate to profi. 

Thanks for working through the feedbacks. 

https://github.com/llvm/llvm-project/pull/95047


More information about the llvm-commits mailing list