[llvm-commits] [llvm] r49581 - in /llvm/branches/ggreif/use-diet: include/llvm/BasicBlock.h lib/VMCore/BasicBlock.cpp

Gabor Greif ggreif at gmail.com
Sat Apr 12 01:14:40 PDT 2008


Author: ggreif
Date: Sat Apr 12 03:14:39 2008
New Revision: 49581

URL: http://llvm.org/viewvc/llvm-project?rev=49581&view=rev
Log:
 trait-ize BasicBlock

Modified:
    llvm/branches/ggreif/use-diet/include/llvm/BasicBlock.h
    llvm/branches/ggreif/use-diet/lib/VMCore/BasicBlock.cpp

Modified: llvm/branches/ggreif/use-diet/include/llvm/BasicBlock.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/include/llvm/BasicBlock.h?rev=49581&r1=49580&r2=49581&view=diff

==============================================================================
--- llvm/branches/ggreif/use-diet/include/llvm/BasicBlock.h (original)
+++ llvm/branches/ggreif/use-diet/include/llvm/BasicBlock.h Sat Apr 12 03:14:39 2008
@@ -18,6 +18,7 @@
 #include "llvm/SymbolTableListTraits.h"
 #include "llvm/ADT/ilist"
 #include "llvm/Support/DataTypes.h"
+#include "llvm/OperandTraits.h"
 
 namespace llvm {
 
@@ -56,7 +57,6 @@
   InstListType InstList;
   BasicBlock *Prev, *Next; // Next and Prev links for our intrusive linked list
   Function *Parent;
-/*  Use unwindDest;*/
 
   void setParent(Function *parent);
   void setNext(BasicBlock *N) { Next = N; }
@@ -80,10 +80,13 @@
   // allocate space for exactly zero operands
   static BasicBlock *Create(const std::string &Name = "", Function *Parent = 0,
                             BasicBlock *InsertBefore = 0, BasicBlock *UnwindDest = 0) {
-    return new(!!UnwindDest) BasicBlock(Name, Parent, InsertBefore, UnwindDest);
+    return new(1) BasicBlock(Name, Parent, InsertBefore, UnwindDest);
   }
   ~BasicBlock();
 
+  /// Provide fast operand accessors
+  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
+
   /// getUnwindDest - Returns the BasicBlock that flow will enter if an unwind
   /// instruction occurs in this block. May be null, in which case unwinding
   /// is undefined in this block.
@@ -230,6 +233,12 @@
   return BasicBlock::getInstListOffset();
 }
 
+template <>
+struct OperandTraits<BasicBlock> : OptionalOperandTraits<> {
+};
+
+DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BasicBlock, Value)
+
 } // End llvm namespace
 
 #endif

Modified: llvm/branches/ggreif/use-diet/lib/VMCore/BasicBlock.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/lib/VMCore/BasicBlock.cpp?rev=49581&r1=49580&r2=49581&view=diff

==============================================================================
--- llvm/branches/ggreif/use-diet/lib/VMCore/BasicBlock.cpp (original)
+++ llvm/branches/ggreif/use-diet/lib/VMCore/BasicBlock.cpp Sat Apr 12 03:14:39 2008
@@ -75,7 +75,9 @@
 
 BasicBlock::BasicBlock(const std::string &Name, Function *NewParent,
                        BasicBlock *InsertBefore, BasicBlock *Dest)
-  : User(Type::LabelTy, Value::BasicBlockVal, &Op<0>()/*unwindDest*/, 0/*FIXME*/), Parent(0) {
+  : User(Type::LabelTy, Value::BasicBlockVal,
+         OperandTraits<BasicBlock>::op_begin(this),
+         !!Dest), Parent(0) {
 
   // Make sure that we get added to a function
   LeakDetector::addGarbageObject(this);
@@ -89,7 +91,7 @@
   }
   
   setName(Name);
-  // Op<0>()./*unwindDest.*/init(NULL, this); /*FIXME*/
+
   if (Dest)
     setUnwindDest(Dest);
 }
@@ -133,9 +135,8 @@
 }
 
 void BasicBlock::setUnwindDest(BasicBlock *dest) {
-//  NumOperands = unwindDest ? 1 : 0;
-  if (dest) // FIXME
-    Op<0>().set(dest);
+  NumOperands = dest ? 1 : 0;
+  Op<0>().set(dest);
 }
 
 /// moveBefore - Unlink this basic block from its current function and
@@ -293,7 +294,7 @@
   assert(I != InstList.end() &&
          "Trying to get me to create degenerate basic block!");
 
-  BasicBlock *New = new(0/*FIXME*/) BasicBlock(BBName, getParent(), getNext());
+  BasicBlock *New = new(1) BasicBlock(BBName, getParent(), getNext());
 
   // Move all of the specified instructions from the original basic block into
   // the new basic block.





More information about the llvm-commits mailing list