From: Jay Foad Date: Sun, 16 Jan 2011 08:10:57 +0000 (+0000) Subject: Move the implementation of the User class into a new source file, X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=bdbe342e8602e38c7eadb4f0c2664e7e30bff768;p=oota-llvm.git Move the implementation of the User class into a new source file, User.cpp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123575 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Use.h b/include/llvm/Use.h index 507504ecdc8..47511c8e18f 100644 --- a/include/llvm/Use.h +++ b/include/llvm/Use.h @@ -208,6 +208,15 @@ public: unsigned getOperandNo() const; }; +//===----------------------------------------------------------------------===// +// AugmentedUse layout struct +//===----------------------------------------------------------------------===// + +struct AugmentedUse : public Use { + PointerIntPair ref; + AugmentedUse(); // not implemented +}; + } // End llvm namespace #endif diff --git a/lib/VMCore/CMakeLists.txt b/lib/VMCore/CMakeLists.txt index 0ff260f060a..1abd031dae4 100644 --- a/lib/VMCore/CMakeLists.txt +++ b/lib/VMCore/CMakeLists.txt @@ -30,6 +30,7 @@ add_llvm_library(LLVMCore Type.cpp TypeSymbolTable.cpp Use.cpp + User.cpp Value.cpp ValueSymbolTable.cpp ValueTypes.cpp diff --git a/lib/VMCore/Use.cpp b/lib/VMCore/Use.cpp index 5dfe6506855..32cf954ac65 100644 --- a/lib/VMCore/Use.cpp +++ b/lib/VMCore/Use.cpp @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/User.h" +#include "llvm/Value.h" namespace llvm { @@ -137,16 +137,6 @@ void Use::zap(Use *Start, const Use *Stop, bool del) { } } -//===----------------------------------------------------------------------===// -// AugmentedUse layout struct -//===----------------------------------------------------------------------===// - -struct AugmentedUse : public Use { - PointerIntPair ref; - AugmentedUse(); // not implemented -}; - - //===----------------------------------------------------------------------===// // Use getUser Implementation //===----------------------------------------------------------------------===// @@ -161,53 +151,4 @@ User *Use::getUser() const { : (User*)End; } -//===----------------------------------------------------------------------===// -// 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; - PointerIntPair& ref(static_cast(End[-1]).ref); - ref.setPointer(const_cast(this)); - ref.setInt(tagOne); - return Use::initTags(Begin, End); -} - -//===----------------------------------------------------------------------===// -// User operator new Implementations -//===----------------------------------------------------------------------===// - -void *User::operator new(size_t s, unsigned Us) { - void *Storage = ::operator new(s + sizeof(Use) * Us); - Use *Start = static_cast(Storage); - Use *End = Start + Us; - User *Obj = reinterpret_cast(End); - Obj->OperandList = Start; - Obj->NumOperands = Us; - Use::initTags(Start, End); - return Obj; -} - -//===----------------------------------------------------------------------===// -// User operator delete Implementation -//===----------------------------------------------------------------------===// - -void User::operator delete(void *Usr) { - User *Start = static_cast(Usr); - Use *Storage = static_cast(Usr) - Start->NumOperands; - // - // look for a variadic User - if (Storage == Start->OperandList) { - ::operator delete(Storage); - return; - } - // - // in all other cases just delete the nullary User (covers hung-off - // uses also - ::operator delete(Usr); -} - } // End llvm namespace diff --git a/lib/VMCore/User.cpp b/lib/VMCore/User.cpp new file mode 100644 index 00000000000..153eb34e090 --- /dev/null +++ b/lib/VMCore/User.cpp @@ -0,0 +1,87 @@ +//===-- User.cpp - Implement the User class -------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Constant.h" +#include "llvm/GlobalValue.h" +#include "llvm/User.h" + +namespace llvm { + +//===----------------------------------------------------------------------===// +// User Class +//===----------------------------------------------------------------------===// + +// replaceUsesOfWith - Replaces all references to the "From" definition with +// references to the "To" definition. +// +void User::replaceUsesOfWith(Value *From, Value *To) { + if (From == To) return; // Duh what? + + assert((!isa(this) || isa(this)) && + "Cannot call User::replaceUsesOfWith on a constant!"); + + for (unsigned i = 0, E = getNumOperands(); i != E; ++i) + if (getOperand(i) == From) { // Is This operand is pointing to oldval? + // The side effects of this setOperand call include linking to + // "To", adding "this" to the uses list of To, and + // most importantly, removing "this" from the use list of "From". + setOperand(i, To); // Fix it now... + } +} + +//===----------------------------------------------------------------------===// +// 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; + PointerIntPair& ref(static_cast(End[-1]).ref); + ref.setPointer(const_cast(this)); + ref.setInt(tagOne); + return Use::initTags(Begin, End); +} + +//===----------------------------------------------------------------------===// +// User operator new Implementations +//===----------------------------------------------------------------------===// + +void *User::operator new(size_t s, unsigned Us) { + void *Storage = ::operator new(s + sizeof(Use) * Us); + Use *Start = static_cast(Storage); + Use *End = Start + Us; + User *Obj = reinterpret_cast(End); + Obj->OperandList = Start; + Obj->NumOperands = Us; + Use::initTags(Start, End); + return Obj; +} + +//===----------------------------------------------------------------------===// +// User operator delete Implementation +//===----------------------------------------------------------------------===// + +void User::operator delete(void *Usr) { + User *Start = static_cast(Usr); + Use *Storage = static_cast(Usr) - Start->NumOperands; + // + // look for a variadic User + if (Storage == Start->OperandList) { + ::operator delete(Storage); + return; + } + // + // in all other cases just delete the nullary User (covers hung-off + // uses also + ::operator delete(Usr); +} + +} // End llvm namespace diff --git a/lib/VMCore/Value.cpp b/lib/VMCore/Value.cpp index 36e6b4c070e..38438265dd6 100644 --- a/lib/VMCore/Value.cpp +++ b/lib/VMCore/Value.cpp @@ -634,26 +634,3 @@ void ValueHandleBase::ValueIsRAUWd(Value *Old, Value *New) { /// ~CallbackVH. Empty, but defined here to avoid emitting the vtable /// more than once. CallbackVH::~CallbackVH() {} - - -//===----------------------------------------------------------------------===// -// User Class -//===----------------------------------------------------------------------===// - -// replaceUsesOfWith - Replaces all references to the "From" definition with -// references to the "To" definition. -// -void User::replaceUsesOfWith(Value *From, Value *To) { - if (From == To) return; // Duh what? - - assert((!isa(this) || isa(this)) && - "Cannot call User::replaceUsesOfWith on a constant!"); - - for (unsigned i = 0, E = getNumOperands(); i != E; ++i) - if (getOperand(i) == From) { // Is This operand is pointing to oldval? - // The side effects of this setOperand call include linking to - // "To", adding "this" to the uses list of To, and - // most importantly, removing "this" from the use list of "From". - setOperand(i, To); // Fix it now... - } -}