diff options
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index dcbd87d566..22ce82336f 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -374,16 +374,22 @@ static bool ProcessInternalGlobal(GlobalVariable *GV, Module::giterator &GVI) { // Delete it now. if (!GS.isLoaded) { DEBUG(std::cerr << "GLOBAL NEVER LOADED: " << *GV); + unsigned NumUsers = GV->use_size(); + // Delete any stores we can find to the global. We may not be able to // make it completely dead though. CleanupConstantGlobalUsers(GV, GV->getInitializer()); + // Did we delete any stores? + bool Changed = NumUsers != GV->use_size(); + // If the global is dead now, delete it. if (GV->use_empty()) { GV->getParent()->getGlobalList().erase(GV); ++NumDeleted; + Changed = true; } - return true; + return Changed; } else if (GS.StoredType <= GlobalStatus::isInitializerStored) { DEBUG(std::cerr << "MARKING CONSTANT: " << *GV); |