[llvm] [UniformityAnalysis] Replace DenseMap with SmallVector indexed by block number. NFC (PR #210564)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 18 18:40:32 PDT 2026
https://github.com/MaskRay created https://github.com/llvm/llvm-project/pull/210564
None
>From 1b13d0b74dfb532ac80375532b25ad2fb52d71f2 Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Fri, 17 Jul 2026 00:41:23 -0700
Subject: [PATCH] [UniformityAnalysis] Replace DenseMap with SmallVector
indexed by block number. NFC
---
llvm/include/llvm/ADT/GenericUniformityImpl.h | 20 +++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/llvm/include/llvm/ADT/GenericUniformityImpl.h b/llvm/include/llvm/ADT/GenericUniformityImpl.h
index 737efde1d5e88..b7918122b891a 100644
--- a/llvm/include/llvm/ADT/GenericUniformityImpl.h
+++ b/llvm/include/llvm/ADT/GenericUniformityImpl.h
@@ -104,21 +104,26 @@ template <typename ContextT> class ModifiedPostOrder {
void clear() { Order.clear(); }
void compute(const CycleInfoT &CI);
- unsigned count(BlockT *BB) const { return POIndex.count(BB); }
+ unsigned count(BlockT *BB) const {
+ unsigned Num = GraphTraits<BlockT *>::getNumber(BB);
+ return Num < POIndex.size() && POIndex[Num] != InvalidIndex;
+ }
const BlockT *operator[](size_t Idx) const { return Order[Idx]; }
void appendBlock(const BlockT &BB, bool IsReducibleCycleHeader = false) {
- POIndex[&BB] = Order.size();
+ unsigned Num = GraphTraits<const BlockT *>::getNumber(&BB);
+ POIndex[Num] = Order.size();
Order.push_back(&BB);
- LLVM_DEBUG(dbgs() << "ModifiedPO(" << POIndex[&BB]
+ LLVM_DEBUG(dbgs() << "ModifiedPO(" << POIndex[Num]
<< "): " << Context.print(&BB) << "\n");
if (IsReducibleCycleHeader)
ReducibleCycleHeaders.insert(&BB);
}
unsigned getIndex(const BlockT *BB) const {
- assert(POIndex.count(BB));
- return POIndex.lookup(BB);
+ unsigned Num = GraphTraits<const BlockT *>::getNumber(BB);
+ assert(Num < POIndex.size() && POIndex[Num] != InvalidIndex);
+ return POIndex[Num];
}
bool isReducibleCycleHeader(const BlockT *BB) const {
@@ -126,8 +131,10 @@ template <typename ContextT> class ModifiedPostOrder {
}
private:
+ static constexpr unsigned InvalidIndex = -1u;
+
SmallVector<const BlockT *> Order;
- DenseMap<const BlockT *, unsigned> POIndex;
+ SmallVector<unsigned> POIndex;
SmallPtrSet<const BlockT *, 32> ReducibleCycleHeaders;
const ContextT &Context;
@@ -1434,6 +1441,7 @@ void llvm::ModifiedPostOrder<ContextT>::compute(const CycleInfoT &CI) {
SmallPtrSet<const BlockT *, 32> Finalized;
SmallVector<const BlockT *> Stack;
auto *F = CI.getFunction();
+ POIndex.assign(GraphTraits<const FunctionT *>::getMaxNumber(F), InvalidIndex);
Stack.reserve(24); // FIXME made-up number
Stack.push_back(&F->front());
computeStackPO(Stack, CI, CycleRef(), Finalized);
More information about the llvm-commits
mailing list