X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.cpp;h=934416c28684f250fa8c37b9d842f5f05c39b7a9;hp=79031e41eeda0cc970162d3632c31eaadd253ae5;hb=96881e56ececfa3f4b0707dc168c687b35d249a0;hpb=b3e71de19f35773c22391151ebb02062d6894bc9 diff --git a/source/programcompiler.cpp b/source/programcompiler.cpp index 79031e41..934416c2 100644 --- a/source/programcompiler.cpp +++ b/source/programcompiler.cpp @@ -55,8 +55,13 @@ void ProgramCompiler::process() { for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) generate(*i); - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - optimize(*i); + for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ) + { + if(optimize(*i)) + i = module->stages.begin(); + else + ++i; + } } void ProgramCompiler::generate(Stage &stage) @@ -69,20 +74,16 @@ void ProgramCompiler::generate(Stage &stage) apply(stage); } -void ProgramCompiler::optimize(Stage &stage) +bool ProgramCompiler::optimize(Stage &stage) { - while(1) - { - UnusedVariableLocator unused_locator; - unused_locator.apply(stage); + UnusedVariableLocator unused_locator; + unused_locator.apply(stage); - NodeRemover remover; - remover.to_remove = unused_locator.unused_nodes; - remover.apply(stage); + NodeRemover remover; + remover.to_remove = unused_locator.unused_nodes; + remover.apply(stage); - if(!remover.n_removed) - break; - } + return remover.n_removed; } void ProgramCompiler::inject_block(Block &target, const Block &source)