diff options
author | Jay Foad <jay.foad@gmail.com> | 2011-01-16 08:10:57 +0000 |
---|---|---|
committer | Jay Foad <jay.foad@gmail.com> | 2011-01-16 08:10:57 +0000 |
commit | bdbe342e8602e38c7eadb4f0c2664e7e30bff768 (patch) | |
tree | 4a3ff783119429a1e6b5e3b7e92f9ff539c67f98 | |
parent | 28252b6f0a483ffb0ead991c7a1ead14e3cd2fc1 (diff) | |
download | llvm-bdbe342e8602e38c7eadb4f0c2664e7e30bff768.tar.gz llvm-bdbe342e8602e38c7eadb4f0c2664e7e30bff768.tar.bz2 llvm-bdbe342e8602e38c7eadb4f0c2664e7e30bff768.tar.xz |
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
-rw-r--r-- | include/llvm/Use.h | 9 | ||||
-rw-r--r-- | lib/VMCore/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lib/VMCore/Use.cpp | 61 | ||||
-rw-r--r-- | lib/VMCore/User.cpp | 87 | ||||
-rw-r--r-- | lib/VMCore/Value.cpp | 23 |
5 files changed, 98 insertions, 83 deletions
diff --git a/include/llvm/Use.h b/include/llvm/Use.h index 507504ecdc..47511c8e18 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<User*, 1, Tag> ref; + AugmentedUse(); // not implemented +}; + } // End llvm namespace #endif diff --git a/lib/VMCore/CMakeLists.txt b/lib/VMCore/CMakeLists.txt index 0ff260f060..1abd031dae 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 5dfe650685..32cf954ac6 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 { @@ -138,16 +138,6 @@ void Use::zap(Use *Start, const Use *Stop, bool del) { } //===----------------------------------------------------------------------===// -// AugmentedUse layout struct -//===----------------------------------------------------------------------===// - -struct AugmentedUse : public Use { - PointerIntPair<User*, 1, Tag> 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<Use*>(::operator new(sizeof(Use) * N - + sizeof(AugmentedUse) - - sizeof(Use))); - Use *End = Begin + N; - PointerIntPair<User*, 1, Tag>& ref(static_cast<AugmentedUse&>(End[-1]).ref); - ref.setPointer(const_cast<User*>(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<Use*>(Storage); - Use *End = Start + Us; - User *Obj = reinterpret_cast<User*>(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<User*>(Usr); - Use *Storage = static_cast<Use*>(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 0000000000..153eb34e09 --- /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<Constant>(this) || isa<GlobalValue>(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<Use*>(::operator new(sizeof(Use) * N + + sizeof(AugmentedUse) + - sizeof(Use))); + Use *End = Begin + N; + PointerIntPair<User*, 1, Tag>& ref(static_cast<AugmentedUse&>(End[-1]).ref); + ref.setPointer(const_cast<User*>(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<Use*>(Storage); + Use *End = Start + Us; + User *Obj = reinterpret_cast<User*>(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<User*>(Usr); + Use *Storage = static_cast<Use*>(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 36e6b4c070..38438265dd 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<Constant>(this) || isa<GlobalValue>(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... - } -} |