Implement new method

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14767 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2004-07-12 01:17:34 +00:00
parent 0d88616c9a
commit 1c2fe31483

View File

@ -13,6 +13,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/Module.h"
#include "llvm/Constant.h"
#include "llvm/DerivedTypes.h"
#include "llvm/iOther.h"
#include "llvm/Intrinsics.h"
@ -81,6 +82,41 @@ void Argument::setParent(Function *parent) {
LeakDetector::removeGarbageObject(this);
}
static bool removeDeadConstantUsers(Constant *C) {
while (!C->use_empty()) {
if (Constant *C = dyn_cast<Constant>(C->use_back())) {
if (!removeDeadConstantUsers(C))
return false; // Constant wasn't dead.
} else {
return false; // Nonconstant user of the global.
}
}
C->destroyConstant();
return true;
}
/// 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.
///
/// This function returns true if the global value is now dead. If all
/// users of this global are not dead, this method may return false and
/// leave some of them around.
bool GlobalValue::removeDeadConstantUsers() {
while (!use_empty()) {
if (Constant *C = dyn_cast<Constant>(use_back())) {
if (!::removeDeadConstantUsers(C))
return false; // Constant wasn't dead.
} else {
return false; // Nonconstant user of the global.
}
}
return true;
}
//===----------------------------------------------------------------------===//
// Function Implementation