Remove reference to dead GEPSplitterPass. PR11506.
[oota-llvm.git] / include / llvm / SymbolTableListTraits.h
index a78d27f6e87cfeea9c2783efd17bae9ea9120104..91a4eb99ff0d368c489c7b0d9ff50829b93bf08a 100644 (file)
@@ -2,8 +2,8 @@
 //
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
 //
 #ifndef LLVM_SYMBOLTABLELISTTRAITS_H
 #define LLVM_SYMBOLTABLELISTTRAITS_H
 
-namespace llvm {
+#include "llvm/ADT/ilist.h"
 
+namespace llvm {
+class ValueSymbolTable;
+  
 template<typename NodeTy> class ilist_iterator;
 template<typename NodeTy, typename Traits> class iplist;
 template<typename Ty> struct ilist_traits;
 
-// ValueSubClass  - The type of objects that I hold, e.g. Instruction.
-// ItemParentType - The type of object that owns the list, e.g. BasicBlock.
-// TraitBaseClass - The class this trait should inherit from, it should
-//                  inherit from ilist_traits<ValueSubClass>
+// ValueSubClass   - The type of objects that I hold, e.g. Instruction.
+// ItemParentClass - The type of object that owns the list, e.g. BasicBlock.
 //
 template<typename ValueSubClass, typename ItemParentClass>
-class SymbolTableListTraits {
+class SymbolTableListTraits : public ilist_default_traits<ValueSubClass> {
   typedef ilist_traits<ValueSubClass> TraitsClass;
 public:
   SymbolTableListTraits() {}
@@ -45,30 +46,32 @@ public:
   /// getListOwner - Return the object that owns this list.  If this is a list
   /// of instructions, it returns the BasicBlock that owns them.
   ItemParentClass *getListOwner() {
-    return reinterpret_cast<ItemParentClass*>(reinterpret_cast<char*>(this)-
-                                              TraitsClass::getListOffset());
-  }
-  static ValueSubClass *getPrev(ValueSubClass *V) { return V->getPrev(); }
-  static ValueSubClass *getNext(ValueSubClass *V) { return V->getNext(); }
-  static const ValueSubClass *getPrev(const ValueSubClass *V) {
-    return V->getPrev();
+    typedef iplist<ValueSubClass> ItemParentClass::*Sublist;
+    size_t Offset(size_t(&((ItemParentClass*)0->*ItemParentClass::
+                           getSublistAccess(static_cast<ValueSubClass*>(0)))));
+    iplist<ValueSubClass>* Anchor(static_cast<iplist<ValueSubClass>*>(this));
+    return reinterpret_cast<ItemParentClass*>(reinterpret_cast<char*>(Anchor)-
+                                              Offset);
   }
-  static const ValueSubClass *getNext(const ValueSubClass *V) {
-    return V->getNext();
+
+  static iplist<ValueSubClass> &getList(ItemParentClass *Par) {
+    return Par->*(Par->getSublistAccess((ValueSubClass*)0));
   }
 
-  static void setPrev(ValueSubClass *V, ValueSubClass *P) { V->setPrev(P); }
-  static void setNext(ValueSubClass *V, ValueSubClass *N) { V->setNext(N); }
+  static ValueSymbolTable *getSymTab(ItemParentClass *Par) {
+    return Par ? toPtr(Par->getValueSymbolTable()) : 0;
+  }
 
   void addNodeToList(ValueSubClass *V);
   void removeNodeFromList(ValueSubClass *V);
-  void transferNodesFromList(iplist<ValueSubClass,
-                             ilist_traits<ValueSubClass> > &L2,
+  void transferNodesFromList(ilist_traits<ValueSubClass> &L2,
                              ilist_iterator<ValueSubClass> first,
                              ilist_iterator<ValueSubClass> last);
 //private:
   template<typename TPtr>
   void setSymTabObject(TPtr *, TPtr);
+  static ValueSymbolTable *toPtr(ValueSymbolTable *P) { return P; }
+  static ValueSymbolTable *toPtr(ValueSymbolTable &R) { return &R; }
 };
 
 } // End llvm namespace