diff options
-rw-r--r-- | include/llvm/User.h | 19 | ||||
-rw-r--r-- | lib/VMCore/Value.cpp | 19 |
2 files changed, 21 insertions, 17 deletions
diff --git a/include/llvm/User.h b/include/llvm/User.h index 1454779154..44beac2ff8 100644 --- a/include/llvm/User.h +++ b/include/llvm/User.h @@ -227,16 +227,7 @@ protected: /// unsigned NumOperands; - void *operator new(size_t s, unsigned Us) { - void *Storage = ::operator new(s + sizeof(Use) * Us); - Use *Start = static_cast<Use*>(Storage); - Use *End = Start + Us; - User *Obj = reinterpret_cast<User*>(End); - Obj->OperandList = Start; - Obj->NumOperands = Us; - Use::initTags(Start, End); - return Obj; - } + void *operator new(size_t s, unsigned Us); User(const Type *Ty, unsigned vty, Use *OpList, unsigned NumOps) : Value(Ty, vty), OperandList(OpList), NumOperands(NumOps) {} Use *allocHungoffUses(unsigned) const; @@ -251,13 +242,7 @@ public: ~User() { Use::zap(OperandList, OperandList + NumOperands); } - void operator delete(void *Usr) { - User *Start = static_cast<User*>(Usr); - Use *Storage = static_cast<Use*>(Usr) - Start->NumOperands; - ::operator delete(Storage == Start->OperandList - ? Storage - : Usr); - } + void operator delete(void *Usr); template <unsigned Idx> Use &Op() { return OperandTraits<User>::op_begin(this)[Idx]; } diff --git a/lib/VMCore/Value.cpp b/lib/VMCore/Value.cpp index ff056ba74a..919f4b00e8 100644 --- a/lib/VMCore/Value.cpp +++ b/lib/VMCore/Value.cpp @@ -355,3 +355,22 @@ void User::replaceUsesOfWith(Value *From, Value *To) { setOperand(i, To); // Fix it now... } } + +void *User::operator new(size_t s, unsigned Us) { + void *Storage = ::operator new(s + sizeof(Use) * Us); + Use *Start = static_cast<Use*>(Storage); + Use *End = Start + Us; + User *Obj = reinterpret_cast<User*>(End); + Obj->OperandList = Start; + Obj->NumOperands = Us; + Use::initTags(Start, End); + return Obj; +} + +void User::operator delete(void *Usr) { + User *Start = static_cast<User*>(Usr); + Use *Storage = static_cast<Use*>(Usr) - Start->NumOperands; + ::operator delete(Storage == Start->OperandList + ? Storage + : Usr); +} |