[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