X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FVMCore%2FUse.cpp;h=359a1517ab79b719062c6294fe9b3c2aa311190e;hb=50f603fff686df4a5ffaf01aa7af43aa64cf4615;hp=0672209bffaf97c50585a75b972e09437b1a7fa4;hpb=94fb68ba217975d2d99ae86d15993402158ac655;p=oota-llvm.git diff --git a/lib/VMCore/Use.cpp b/lib/VMCore/Use.cpp index 0672209bffa..359a1517ab7 100644 --- a/lib/VMCore/Use.cpp +++ b/lib/VMCore/Use.cpp @@ -1,4 +1,4 @@ -//===-- Use.cpp - Implement the Use class -------------------------------===// +//===-- Use.cpp - Implement the Use class ---------------------------------===// // // The LLVM Compiler Infrastructure // @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/User.h" +#include "llvm/Value.h" namespace llvm { @@ -52,7 +52,7 @@ const Use *Use::getImpliedUser() const { const Use *Current = this; while (true) { - unsigned Tag = extractTag((Current++)->Prev); + unsigned Tag = (Current++)->Prev.getInt(); switch (Tag) { case zeroDigitTag: case oneDigitTag: @@ -62,7 +62,7 @@ const Use *Use::getImpliedUser() const { ++Current; ptrdiff_t Offset = 1; while (true) { - unsigned Tag = extractTag(Current->Prev); + unsigned Tag = Current->Prev.getInt(); switch (Tag) { case zeroDigitTag: case oneDigitTag: @@ -85,17 +85,31 @@ const Use *Use::getImpliedUser() const { // Use initTags Implementation //===----------------------------------------------------------------------===// -Use *Use::initTags(Use * const Start, Use *Stop, ptrdiff_t Done) { +Use *Use::initTags(Use * const Start, Use *Stop) { + ptrdiff_t Done = 0; + while (Done < 20) { + if (Start == Stop--) + return Start; + static const PrevPtrTag tags[20] = { fullStopTag, oneDigitTag, stopTag, + oneDigitTag, oneDigitTag, stopTag, + zeroDigitTag, oneDigitTag, oneDigitTag, + stopTag, zeroDigitTag, oneDigitTag, + zeroDigitTag, oneDigitTag, stopTag, + oneDigitTag, oneDigitTag, oneDigitTag, + oneDigitTag, stopTag + }; + new(Stop) Use(tags[Done++]); + } + ptrdiff_t Count = Done; while (Start != Stop) { --Stop; - Stop->Val = 0; if (!Count) { - Stop->Prev = reinterpret_cast(Done == 0 ? fullStopTag : stopTag); + new(Stop) Use(stopTag); ++Done; Count = Done; } else { - Stop->Prev = reinterpret_cast(Count & 1); + new(Stop) Use(PrevPtrTag(Count & 1)); Count >>= 1; ++Done; } @@ -109,52 +123,22 @@ Use *Use::initTags(Use * const Start, Use *Stop, ptrdiff_t Done) { //===----------------------------------------------------------------------===// void Use::zap(Use *Start, const Use *Stop, bool del) { - if (del) { - while (Start != Stop) { - (--Stop)->~Use(); - } + while (Start != Stop) + (--Stop)->~Use(); + if (del) ::operator delete(Start); - return; - } - - while (Start != Stop) { - (Start++)->set(0); - } } -//===----------------------------------------------------------------------===// -// AugmentedUse layout struct -//===----------------------------------------------------------------------===// - -struct AugmentedUse : Use { - User *ref; - AugmentedUse(); // not implemented -}; - - //===----------------------------------------------------------------------===// // Use getUser Implementation //===----------------------------------------------------------------------===// User *Use::getUser() const { const Use *End = getImpliedUser(); - User *She = static_cast(End - 1)->ref; - She = extractTag(She) - ? llvm::stripTag(She) - : reinterpret_cast(const_cast(End)); - - return She; -} - -//===----------------------------------------------------------------------===// -// User allocHungoffUses Implementation -//===----------------------------------------------------------------------===// - -Use *User::allocHungoffUses(unsigned N) const { - Use *Begin = static_cast(::operator new(sizeof(Use) * N + sizeof(AugmentedUse) - sizeof(Use))); - Use *End = Begin + N; - static_cast(End[-1]).ref = addTag(this, tagOne); - return Use::initTags(Begin, End); + const UserRef *ref = reinterpret_cast(End); + return ref->getInt() + ? ref->getPointer() + : (User*)End; } } // End llvm namespace