[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