Improve conformance with the Misha spelling benchmark suite
[oota-llvm.git] / include / llvm / BasicBlock.h
index 0e12cab223a9b9df6b6eb377f4deaa575a171e91..2b1c3e0eea708c3a61fc64920ac62979a72e444f 100644 (file)
 
 #include "llvm/Instruction.h"
 #include "llvm/SymbolTableListTraits.h"
-#include "Support/ilist"
+#include "llvm/ADT/ilist"
 
 namespace llvm {
 
 class TerminatorInst;
-template <class _Term, class _BB> class SuccIterator;  // Successor Iterator
-template <class _Ptr, class _USE_iterator> class PredIterator;
+template <class Term, class BB> class SuccIterator;  // Successor Iterator
+template <class Ptr, class USE_iterator> class PredIterator;
 
 template<> struct ilist_traits<Instruction>
   : public SymbolTableListTraits<Instruction, BasicBlock, Function> {
-  // createNode is used to create a node that marks the end of the list...
-  static Instruction *createNode();
+  // createSentinel is used to create a node that marks the end of the list...
+  static Instruction *createSentinel();
+  static void destroySentinel(Instruction *I) { delete I; }
   static iplist<Instruction> &getList(BasicBlock *BB);
 };
 
-struct BasicBlock : public Value {       // Basic blocks are data objects also
+class BasicBlock : public Value {       // Basic blocks are data objects also
+public:
   typedef iplist<Instruction> InstListType;
 private :
   InstListType InstList;
@@ -61,8 +63,8 @@ private :
 
 public:
   /// Instruction iterators...
-  typedef InstListType::iterator iterator;
-  typedef InstListType::const_iterator const_iterator;
+  typedef InstListType::iterator                              iterator;
+  typedef InstListType::const_iterator                  const_iterator;
   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
   typedef std::reverse_iterator<iterator>             reverse_iterator;
 
@@ -70,9 +72,6 @@ public:
   /// is automatically inserted at either the end of the function (if
   /// InsertBefore is null), or before the specified basic block.
   ///
-  /// BasicBlock ctor - If the InsertBefore parameter is specified, the basic
-  /// block is automatically inserted right before the specified block.
-  ///
   BasicBlock(const std::string &Name = "", Function *Parent = 0,
              BasicBlock *InsertBefore = 0);
   ~BasicBlock();
@@ -98,6 +97,18 @@ public:
   TerminatorInst *getTerminator();
   const TerminatorInst *const getTerminator() const;
   
+  /// removeFromParent - This method unlinks 'this' from the containing
+  /// function, but does not delete it.
+  ///
+  void removeFromParent();
+
+  /// eraseFromParent - This method unlinks 'this' from the containing function
+  /// and deletes it.
+  ///
+  void eraseFromParent();
+
+
+
   //===--------------------------------------------------------------------===//
   /// Instruction iterator methods
   ///
@@ -111,12 +122,12 @@ public:
   inline reverse_iterator       rend  ()       { return InstList.rend();   }
   inline const_reverse_iterator rend  () const { return InstList.rend();   }
 
-  inline unsigned                 size() const { return InstList.size(); }
+  inline size_t                   size() const { return InstList.size();  }
   inline bool                    empty() const { return InstList.empty(); }
   inline const Instruction      &front() const { return InstList.front(); }
   inline       Instruction      &front()       { return InstList.front(); }
-  inline const Instruction       &back()  const { return InstList.back(); }
-  inline       Instruction       &back()        { return InstList.back(); }
+  inline const Instruction       &back() const { return InstList.back();  }
+  inline       Instruction       &back()       { return InstList.back();  }
 
   /// getInstList() - Return the underlying instruction list container.  You
   /// need to access it directly if you want to modify it currently.