[llvm] [Analysis][NFC] Use block numbers for BranchProbabilityInfo (PR #186658)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 15 11:12:27 PDT 2026


================
@@ -1284,9 +1284,32 @@ void BPIConstruction::calculate(const Function &F, const LoopInfo &LoopI,
 
 } // end anonymous namespace
 
-void BranchProbabilityInfo::releaseMemory() {
-  Probs.clear();
-  Handles.clear();
+MutableArrayRef<BranchProbability>
+BranchProbabilityInfo::allocEdges(const BasicBlock *BB) {
+  assert(BB->getParent() == LastF);
+  assert(BlockNumberEpoch == LastF->getBlockNumberEpoch());
+  unsigned NumSuccs = succ_size(BB);
+  if (NumSuccs == 0) {
+    eraseBlock(BB);
+    return {};
+  }
+  if (EdgeStarts.size() <= BB->getNumber())
+    EdgeStarts.resize(LastF->getMaxBlockNumber(), 0);
+  unsigned EdgeStart = Probs.size();
+  EdgeStarts[BB->getNumber()] = EdgeStart + 1; // 0 = no edges.
+  Probs.append(NumSuccs, {});
+  return MutableArrayRef(&Probs[EdgeStart], NumSuccs);
+}
+
+const BranchProbability *
----------------
nikic wrote:

Can we return ArrayRef here as well, so it's bounds-checked?

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


More information about the llvm-commits mailing list