From: Chris Lattner Date: Sun, 10 Oct 2004 16:47:33 +0000 (+0000) Subject: Implement GlobalOpt/deadglobal-2.llx, deletion of globals that are only X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c4d81b0388dff9f38e1387bb223cc7b514c06d01;p=oota-llvm.git Implement GlobalOpt/deadglobal-2.llx, deletion of globals that are only stored to, but are stored at variable indexes. This occurs at least in 176.gcc, but probably others, and we should handle it for completeness. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16876 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index 7c0c3225129..3a58afdc260 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -259,6 +259,17 @@ static bool CleanupConstantGlobalUsers(Value *V, Constant *Init) { } else if (GetElementPtrInst *GEP = dyn_cast(U)) { if (Constant *SubInit = TraverseGEPInitializer(GEP, Init)) Changed |= CleanupConstantGlobalUsers(GEP, SubInit); + else { + // If this GEP has variable indexes, we should still be able to delete + // any stores through it. + for (Value::use_iterator GUI = GEP->use_begin(), E = GEP->use_end(); + GUI != E;) + if (StoreInst *SI = dyn_cast(*GUI++)) { + SI->getParent()->getInstList().erase(SI); + Changed = true; + } + } + if (GEP->use_empty()) { GEP->getParent()->getInstList().erase(GEP); Changed = true;