diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/IPO/DeadTypeElimination.cpp | 15 | 
1 files changed, 5 insertions, 10 deletions
| diff --git a/llvm/lib/Transforms/IPO/DeadTypeElimination.cpp b/llvm/lib/Transforms/IPO/DeadTypeElimination.cpp index 842bc58b296..58fe7f0a595 100644 --- a/llvm/lib/Transforms/IPO/DeadTypeElimination.cpp +++ b/llvm/lib/Transforms/IPO/DeadTypeElimination.cpp @@ -74,7 +74,11 @@ bool DTE::run(Module &M) {        // Loop over all entries in the type plane...        SymbolTable::VarMap &Plane = STI->second;        for (SymbolTable::VarMap::iterator PI = Plane.begin(); PI != Plane.end();) -        if (ShouldNukeSymtabEntry(*PI)) {    // Should we remove this entry? +        // If this entry should be unconditionally removed, or if we detect that +        // the type is not used, remove it. +        // +        if (ShouldNukeSymtabEntry(*PI) || +            !UsedTypes.count(cast<Type>(PI->second))) {  #if MAP_IS_NOT_BRAINDEAD            PI = Plane.erase(PI);     // STD C++ Map should support this!  #else @@ -83,15 +87,6 @@ bool DTE::run(Module &M) {  #endif            ++NumKilled;            Changed = true; -        } else if (!UsedTypes.count(cast<Type>(PI->second))) { -#if MAP_IS_NOT_BRAINDEAD -          PI = Plane.erase(PI);     // STD C++ Map should support this! -#else -          Plane.erase(PI);          // Alas, GCC 2.95.3 doesn't  *SIGH* -          PI = Plane.begin();       // N^2 algorithms are fun.  :( -#endif -          ++NumKilled; -          Changed = true;          } else {            ++PI;          } | 

