Optimizer - Remove unused globals

This commit is contained in:
Emmanuel BENOîT 2017-12-17 10:30:00 +01:00
parent 630dd94ba6
commit 01d9586264
2 changed files with 46 additions and 3 deletions

1
TODO
View file

@ -18,6 +18,7 @@ Scripting:
* Unused arguments
* Dead store: call arguments
* Unused functions
* Unused inputs
* Common subexpressions
* Strength reduction
* Loop-invariant code motion

View file

@ -1710,7 +1710,6 @@ bool RDCUnusedLocals_(
) noexcept
{
M_LOGSTR_( "...... Removing unused locals" , 3 );
oData.buildUseDefineChains( program );
const auto nf{ program.root.nFunctions( ) };
bool changed{ false };
@ -1734,7 +1733,7 @@ bool RDCUnusedLocals_(
}
oData.logger( [&](){
T_StringBuilder sb;
sb << "Removing used local variable "
sb << "Removing unused local variable "
<< ln << " at "
<< func.getLocalLocation( l );
return sb;
@ -1747,6 +1746,49 @@ bool RDCUnusedLocals_(
return changed;
}
bool RDCUnusedGlobals_(
T_OpsParserOutput& program ,
T_OptData& oData
) noexcept
{
M_LOGSTR_( "...... Removing unused globals" , 3 );
T_AutoArray< T_String , 16 > remove;
for ( auto const& gn : program.types.keys( ) ) {
const auto gt{ *program.types.get( gn ) };
if ( gt == E_DataType::BUILTIN || gt == E_DataType::INPUT ) {
continue;
}
const T_OptData::T_VarId vid{ gn };
if ( !oData.varUDChains.contains( vid ) ) {
remove.add( gn );
}
}
const auto nr{ remove.size( ) };
for ( auto i = 0u ; i < nr ; i ++ ) {
auto const& gn{ remove[ i ] };
oData.logger( [&](){
T_StringBuilder sb;
sb << "Removing unused global " << gn;
return sb;
} , 4 );
program.types.remove( gn );
}
return remove.size( );
}
bool RDCUnused_(
T_OpsParserOutput& program ,
T_OptData& oData
) noexcept
{
oData.buildUseDefineChains( program );
const bool locals{ RDCUnusedLocals_( program , oData ) };
const bool globals{ RDCUnusedGlobals_( program , oData ) };
return locals || globals;
}
} // namespace <anon>
/*----------------------------------------------------------------------------*/
@ -1770,7 +1812,7 @@ bool opopt::RemoveDeadCode(
didStuffThisTime = RDCConditionals_( program , oData )
|| RDCDeadStores_( program , oData )
|| RDCUnusedLocals_( program , oData );
|| RDCUnused_( program , oData );
didStuff = didStuff || didStuffThisTime;
} while ( didStuffThisTime );