[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