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 | |
| 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')
| -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; | 

