[llvm-commits] [llvm] r49531 - in /llvm/branches/ggreif/use-diet: include/llvm/Use.h include/llvm/User.h lib/Bitcode/Reader/BitcodeReader.h lib/VMCore/Use.cpp

Gabor Greif ggreif at gmail.com
Fri Apr 11 07:56:22 PDT 2008


Author: ggreif
Date: Fri Apr 11 09:56:22 2008
New Revision: 49531

URL: http://llvm.org/viewvc/llvm-project?rev=49531&view=rev
Log:
redefine Use::getUser() to always get the implied one and assert on perceived discrepancies

Modified:
    llvm/branches/ggreif/use-diet/include/llvm/Use.h
    llvm/branches/ggreif/use-diet/include/llvm/User.h
    llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h
    llvm/branches/ggreif/use-diet/lib/VMCore/Use.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=49531&r1=49530&r2=49531&view=diff

==============================================================================
--- llvm/branches/ggreif/use-diet/include/llvm/Use.h (original)
+++ llvm/branches/ggreif/use-diet/include/llvm/Use.h Fri Apr 11 09:56:22 2008
@@ -52,7 +52,7 @@
 
   operator Value*() const { return stripTag(Val); }
   Value *get() const { return stripTag(Val); }
-  User *getUser() const { return U; }
+  User *getUser() const;
   const Use* getImpliedUser() const;
   static void initTags(Use *Start, Use *Stop, ptrdiff_t Done = 0);
   static void zap(Use *Start, const Use *Stop);
@@ -81,7 +81,7 @@
     return reinterpret_cast<Value*>(reinterpret_cast<ptrdiff_t>(V) & ~3UL);
   }
   Value *transferTag(Value *V) {
-    return reinterpret_cast<Value*>(reinterpret_cast<ptrdiff_t>(V) + (reinterpret_cast<ptrdiff_t>(Val) & 3UL));
+    return reinterpret_cast<Value*>(reinterpret_cast<ptrdiff_t>(V) | (reinterpret_cast<ptrdiff_t>(Val) & 3UL));
   }
   void addToList(Use **List) {
     Next = *List;

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

==============================================================================
--- llvm/branches/ggreif/use-diet/include/llvm/User.h (original)
+++ llvm/branches/ggreif/use-diet/include/llvm/User.h Fri Apr 11 09:56:22 2008
@@ -322,8 +322,10 @@
   */
 
 Use *User::allocHangoffUses(unsigned N) const {
-  Use *Begin = static_cast<Use*>(::operator new(sizeof(Use) * N));
-  Use::initTags(Begin, Begin + N);
+  Use *Begin = static_cast<Use*>(::operator new(sizeof(Use) * N + sizeof this));
+  Use *End = Begin + N;
+  (*(User**)End) = (User*)(ptrdiff_t(this) | 1);
+  Use::initTags(Begin, End);
   return Begin;
 }
 

Modified: llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h?rev=49531&r1=49530&r2=49531&view=diff

==============================================================================
--- llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h (original)
+++ llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h Fri Apr 11 09:56:22 2008
@@ -41,9 +41,9 @@
   unsigned size() const { return getNumOperands(); }
   void resize(unsigned);
   void push_back(Value *V) {
-    resize(NumOperands + 1);
-    ++NumOperands;
-    setOperand(NumOperands - 1, V);
+    resize(++NumOperands);
+    OperandList[NumOperands - 1].init(V, this);
+    //setOperand(NumOperands - 1, V);
   }
   
   void clear() {

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

==============================================================================
--- llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp (original)
+++ llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp Fri Apr 11 09:56:22 2008
@@ -80,4 +80,20 @@
   }
 }
 
+//===----------------------------------------------------------------------===//
+//                         Use getUser Implementation
+//===----------------------------------------------------------------------===//
+
+User *Use::getUser() const {
+  const Use* End = getImpliedUser();
+  User *She = End->U;
+  if (ptrdiff_t(She) & 1UL)
+    She = (User*)(ptrdiff_t(She) & ~1UL);
+  else
+    She = (User*)End;
+
+  assert((!U || U == She) && "Implicit User differs?");
+  return She;
+}
+
 } // End llvm namespace





More information about the llvm-commits mailing list