[llvm-commits] [llvm] r56191 - in /llvm/branches/ggreif/use-diet: include/llvm/Use.h lib/VMCore/Value.cpp lib/VMCore/getValue.cpp

Gabor Greif ggreif at gmail.com
Sat Sep 13 14:42:08 PDT 2008


Author: ggreif
Date: Sat Sep 13 16:42:06 2008
New Revision: 56191

URL: http://llvm.org/viewvc/llvm-project?rev=56191&view=rev
Log:
various fixes,
assemling simple .ll file *almost* works,
crashes at deletion of the module

Modified:
    llvm/branches/ggreif/use-diet/include/llvm/Use.h
    llvm/branches/ggreif/use-diet/lib/VMCore/Value.cpp
    llvm/branches/ggreif/use-diet/lib/VMCore/getValue.cpp

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

==============================================================================
--- llvm/branches/ggreif/use-diet/include/llvm/Use.h (original)
+++ llvm/branches/ggreif/use-diet/include/llvm/Use.h Sat Sep 13 16:42:06 2008
@@ -69,6 +69,7 @@
   class UseWaymark;
   friend class UseWaymark;
   Value *getValue() const;
+  static Use *nilUse(const Value*); // marks the end of the def/use chain
 
 public:
   /// init - specify Value and User
@@ -108,12 +109,12 @@
 
 
   operator Value*() const { return get(); }
-  Value *get() const {
+  Value *get() const; /*{
     if (Value *V = getFastValueMaybe())
       return V;
     else
       return Val1; // for now :-)
-    }
+    }*/
   User *getUser() const;
   const Use* getImpliedUser() const;
   static Use *initTags(Use *Start, Use *Stop, ptrdiff_t Done = 0);
@@ -133,7 +134,7 @@
         Value *operator->()       { return get(); }
   const Value *operator->() const { return get(); }
 
-  Use *getNext() const { return Next; }
+  Use *getNext() const { return extractTag<NextPtrTag, fullStopTagN>(Next) == fullStopTagN ? 0 : stripTag<fullStopTagN>(Next); }
 private:
   Value *Val1;
   Use *Next, **Prev;
@@ -143,7 +144,8 @@
   }
   void addToList(Use **List) {
     Next = *List;
-    if (Next) Next->setPrev(&Next);
+    Use *StrippedNext(getNext());
+    if (StrippedNext) StrippedNext->setPrev(&Next);
     setPrev(List);
     *List = this;
   }
@@ -179,7 +181,10 @@
   typedef value_use_iterator<UserTy> _Self;
 
   Use *U;
-  explicit value_use_iterator(Use *u) : U(u) {}
+  explicit value_use_iterator(Use *u) : U(extractTag<Use::NextPtrTag, Use::tagMaskN>(u)
+					  == Use::fullStopTagN
+					  ? 0
+					  : stripTag<Use::tagMaskN>(u)) {}
   friend class Value;
 public:
   typedef typename super::reference reference;
@@ -196,11 +201,11 @@
   }
 
   /// atEnd - return true if this iterator is equal to use_end() on the value.
-  bool atEnd() const { return U == 0; }
+  bool atEnd() const { return !U/*extractTag<Use::NextPtrTag, Use::tagMaskN>(U) == Use::fullStopTagN*/; }
 
   // Iterator traversal: forward iteration only
   _Self &operator++() {          // Preincrement
-    assert(U && "Cannot increment end iterator!");
+    assert(!atEnd() && "Cannot increment end iterator!");
     U = U->getNext();
     return *this;
   }
@@ -210,7 +215,7 @@
 
   // Retrieve a reference to the current User
   UserTy *operator*() const {
-    assert(U && "Cannot dereference end iterator!");
+    assert(!atEnd() && "Cannot dereference end iterator!");
     return U->getUser();
   }
 

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

==============================================================================
--- llvm/branches/ggreif/use-diet/lib/VMCore/Value.cpp (original)
+++ llvm/branches/ggreif/use-diet/lib/VMCore/Value.cpp Sat Sep 13 16:42:06 2008
@@ -34,7 +34,7 @@
 
 Value::Value(const Type *ty, unsigned scid)
   : SubclassID(scid), SubclassData(0), Ty(checkType(ty)),
-    UseList(0), Name(0) {
+    UseList(Use::nilUse(this)), Name(0) {
   if (isa<CallInst>(this) || isa<InvokeInst>(this))
     assert((Ty->isFirstClassType() || Ty == Type::VoidTy ||
             isa<OpaqueType>(ty) || Ty->getTypeID() == Type::StructTyID) &&

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

==============================================================================
--- llvm/branches/ggreif/use-diet/lib/VMCore/getValue.cpp (original)
+++ llvm/branches/ggreif/use-diet/lib/VMCore/getValue.cpp Sat Sep 13 16:42:06 2008
@@ -17,70 +17,11 @@
 
 namespace llvm {
 
-/*
-//===----------------------------------------------------------------------===//
-//                          Generic Tagging Functions
-//===----------------------------------------------------------------------===//
-
-/// Tag - generic tag type for (at least 32 bit) pointers
-enum Tag { noTag, tagOne, tagTwo, tagThree };
-
-/// addTag - insert tag bits into an (untagged) pointer
-template <typename T, typename TAG>
-inline T *addTag(const T *P, TAG Tag) {
-    return reinterpret_cast<T*>(ptrdiff_t(P) | Tag);
-}
-
-/// stripTag - remove tag bits from a pointer,
-/// making it dereferencable
-template <ptrdiff_t MASK, typename T>
-inline T *stripTag(const T *P) {
-  return reinterpret_cast<T*>(ptrdiff_t(P) & ~MASK);
-}
-
-/// extractTag - extract tag bits from a pointer
-template <typename TAG, TAG MASK, typename T>
-inline TAG extractTag(const T *P) {
-  return TAG(ptrdiff_t(P) & MASK);
-}
-
-/// transferTag - transfer tag bits from a pointer,
-/// to an untagged pointer
-template <ptrdiff_t MASK, typename T>
-inline T *transferTag(const T *From, const T *To) {
-  return reinterpret_cast<T*>((ptrdiff_t(From) & MASK) | ptrdiff_t(To));
-}
-
-*/
-
-
-
-
-// class Value;
 class Use::UseWaymark {
 
   friend class Use;
 
 enum { requiredSteps = sizeof(Value*) * 8 - 2 };
-/*
-struct Use {
-  enum NextPtrTag { zeroDigitTagN = tagTwo
-                  , oneDigitTagN = tagOne
-                  , stopTagN = noTag
-                  , fullStopTagN = tagThree };
-
-  Use *Next;
-
-  Use() : Next(reinterpret_cast<Use*>(fullStopTagN)) {}
-  explicit Use(Value *V) : Next(reinterpret_cast<Use*>(addTag(V, fullStopTagN))) {}
-
-  // Link up from front:
-  explicit Use(Use& U) : Next(&U) {}
-
-  Value *getValue() const;
-};
-
-*/
 
 /// repaintByCopying -- given a pattern and a
 /// junk tagspace, copy the former's tags into
@@ -342,6 +283,18 @@
   }
 }
 
+/*inline*/Use *Use::nilUse(const Value *V) {
+  // return 0;
+  return addTag((Use*)V, fullStopTagN);
+}
+
+Value *Use::get() const {
+  Value *V(Val1);
+  Value *ValComp(getValue());
+  if (V != ValComp)
+    assert(V == ValComp && "Computed Value wrong?");
+  return V;
+}
 } // namespace llvm
 
 #if 0





More information about the llvm-commits mailing list