From 68c26396c07b4ad96657d4510f06f7646785278d Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Fri, 19 Nov 2010 22:48:40 +0000 Subject: [PATCH] Document the new GVN number table structure. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119865 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/GVN.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index 2a7985bf957..6d35db4d6f7 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/lib/Transforms/Scalar/GVN.cpp @@ -677,8 +677,13 @@ namespace { ValueTable VN; + /// NumberTable - A mapping from value numers to lists of Value*'s that + /// have that value number. Use lookupNumber to query it. DenseMap > NumberTable; BumpPtrAllocator TableAllocator; + + /// insert_table - Push a new Value to the NumberTable onto the list for + /// its value number. void insert_table(uint32_t N, Value *V) { std::pair& Curr = NumberTable[N]; if (!Curr.first) { @@ -693,6 +698,8 @@ namespace { Curr.second = Node; } + /// erase_table - Scan the list of values corresponding to a given value + /// number, and remove the given value if encountered. void erase_table(uint32_t N, Value *V) { std::pair* Prev = 0; std::pair* Curr = &NumberTable[N]; @@ -1886,6 +1893,11 @@ bool GVN::processLoad(LoadInst *L, SmallVectorImpl &toErase) { return false; } +// lookupNumber - In order to find a leader for a given value number at a +// specific basic block, we first obtain the list of all Values for that number, +// and then scan the list to find one whose block dominates the block in +// question. This is fast because dominator tree queries consist of only +// a few comparisons of DFS numbers. Value *GVN::lookupNumber(BasicBlock *BB, uint32_t num) { std::pair Vals = NumberTable[num]; if (!Vals.first) return 0;