diff options
| author | Owen Anderson <resistor@mac.com> | 2010-11-19 22:48:40 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2010-11-19 22:48:40 +0000 |
| commit | ea326db47be0fa39e84985de118553ecdae9ad54 (patch) | |
| tree | e38a221a2e7ae75cad2c4ee6e8c33fed6a11af0f /llvm/lib/Transforms/Scalar/GVN.cpp | |
| parent | 785952e5ac6ebf0c374027edd7bd5a1d64ccfd47 (diff) | |
| download | bcm5719-llvm-ea326db47be0fa39e84985de118553ecdae9ad54.tar.gz bcm5719-llvm-ea326db47be0fa39e84985de118553ecdae9ad54.zip | |
Document the new GVN number table structure.
llvm-svn: 119865
Diffstat (limited to 'llvm/lib/Transforms/Scalar/GVN.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/GVN.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp index 2a7985bf957..6d35db4d6f7 100644 --- a/llvm/lib/Transforms/Scalar/GVN.cpp +++ b/llvm/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<uint32_t, std::pair<Value*, void*> > 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<Value*, void*>& 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<Value*, void*>* Prev = 0; std::pair<Value*, void*>* Curr = &NumberTable[N]; @@ -1886,6 +1893,11 @@ bool GVN::processLoad(LoadInst *L, SmallVectorImpl<Instruction*> &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<Value*, void*> Vals = NumberTable[num]; if (!Vals.first) return 0; |

