diff options
author | Chris Lattner <sabre@nondot.org> | 2011-02-18 04:41:42 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-02-18 04:41:42 +0000 |
commit | 13fb0db0c26ec498cf8ffb0f9943d28962d4ced7 (patch) | |
tree | b9406d131bfbbef9ad308fdfec368346a223da74 /lib/VMCore/Globals.cpp | |
parent | f5ebfb0d2852e70f11ca7b8d11f704a1378756d8 (diff) | |
download | llvm-13fb0db0c26ec498cf8ffb0f9943d28962d4ced7.tar.gz llvm-13fb0db0c26ec498cf8ffb0f9943d28962d4ced7.tar.bz2 llvm-13fb0db0c26ec498cf8ffb0f9943d28962d4ced7.tar.xz |
hoist GlobalValue::removeDeadConstantUsers up to being a method on Constant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125828 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Globals.cpp')
-rw-r--r-- | lib/VMCore/Globals.cpp | 49 |
1 files changed, 0 insertions, 49 deletions
diff --git a/lib/VMCore/Globals.cpp b/lib/VMCore/Globals.cpp index 96716eeb34..60000ad1b5 100644 --- a/lib/VMCore/Globals.cpp +++ b/lib/VMCore/Globals.cpp @@ -26,23 +26,6 @@ using namespace llvm; // GlobalValue Class //===----------------------------------------------------------------------===// -/// removeDeadUsersOfConstant - If the specified constantexpr is dead, remove -/// it. This involves recursively eliminating any dead users of the -/// constantexpr. -static bool removeDeadUsersOfConstant(const Constant *C) { - if (isa<GlobalValue>(C)) return false; // Cannot remove this - - while (!C->use_empty()) { - const Constant *User = dyn_cast<Constant>(C->use_back()); - if (!User) return false; // Non-constant usage; - if (!removeDeadUsersOfConstant(User)) - return false; // Constant wasn't dead - } - - const_cast<Constant*>(C)->destroyConstant(); - return true; -} - bool GlobalValue::isMaterializable() const { return getParent() && getParent()->isMaterializable(this); } @@ -56,38 +39,6 @@ void GlobalValue::Dematerialize() { getParent()->Dematerialize(this); } -/// removeDeadConstantUsers - If there are any dead constant users dangling -/// off of this global value, remove them. This method is useful for clients -/// that want to check to see if a global is unused, but don't want to deal -/// with potentially dead constants hanging off of the globals. -void GlobalValue::removeDeadConstantUsers() const { - Value::const_use_iterator I = use_begin(), E = use_end(); - Value::const_use_iterator LastNonDeadUser = E; - while (I != E) { - if (const Constant *User = dyn_cast<Constant>(*I)) { - if (!removeDeadUsersOfConstant(User)) { - // If the constant wasn't dead, remember that this was the last live use - // and move on to the next constant. - LastNonDeadUser = I; - ++I; - } else { - // If the constant was dead, then the iterator is invalidated. - if (LastNonDeadUser == E) { - I = use_begin(); - if (I == E) break; - } else { - I = LastNonDeadUser; - ++I; - } - } - } else { - LastNonDeadUser = I; - ++I; - } - } -} - - /// Override destroyConstant to make sure it doesn't get called on /// GlobalValue's because they shouldn't be treated like other constants. void GlobalValue::destroyConstant() { |