Added hook hasReservedCallFrame(). It returns true if the call frame is
[oota-llvm.git] / include / llvm / BasicBlock.h
index 8cc450c127d1b8820b858a0090e6b309861fd6bd..56b64ed2abf7768b492afa030f3e85ac86907a29 100644 (file)
@@ -31,6 +31,7 @@ template<> struct ilist_traits<Instruction>
   static void destroySentinel(Instruction *I) { delete I; }
   static iplist<Instruction> &getList(BasicBlock *BB);
   static ValueSymbolTable *getSymTab(BasicBlock *ItemParent);
+  static int getListOffset();
 };
 
 /// This represents a single basic block in LLVM. A basic block is simply a
@@ -81,12 +82,6 @@ public:
   const Function *getParent() const { return Parent; }
         Function *getParent()       { return Parent; }
 
-  // getNext/Prev - Return the next or previous basic block in the list.
-        BasicBlock *getNext()       { return Next; }
-  const BasicBlock *getNext() const { return Next; }
-        BasicBlock *getPrev()       { return Prev; }
-  const BasicBlock *getPrev() const { return Prev; }
-
   /// use_back - Specialize the methods defined in Value, as we know that an
   /// BasicBlock can only be used by Instructions (specifically PHI and terms).
   Instruction       *use_back()       { return cast<Instruction>(*use_begin());}
@@ -194,8 +189,27 @@ public:
   /// the basic block).
   ///
   BasicBlock *splitBasicBlock(iterator I, const std::string &BBName = "");
+  
+  
+  static unsigned getInstListOffset() {
+    BasicBlock *Obj = 0;
+    return unsigned(reinterpret_cast<uintptr_t>(&Obj->InstList));
+  }
+
+private:
+  // getNext/Prev - Return the next or previous basic block in the list.  Access
+  // these with Function::iterator.
+  BasicBlock *getNext()       { return Next; }
+  const BasicBlock *getNext() const { return Next; }
+  BasicBlock *getPrev()       { return Prev; }
+  const BasicBlock *getPrev() const { return Prev; }
 };
 
+inline int 
+ilist_traits<Instruction>::getListOffset() {
+  return BasicBlock::getInstListOffset();
+}
+
 } // End llvm namespace
 
 #endif