<div dir="ltr">I don't suppose there's any way to find out whether the second iteration did anything? That is, suppose you have a module and you run some passes over it - if something changed, further iterations might be fruitful, but if nothing changed then further iterations definitely won't do anything so you can stop. In principle one could make a copy of the module beforehand and then compare, but being a large complex data structure, it probably doesn't provide equality comparison by value?<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 6, 2015 at 1:17 PM, serge guelton <span dir="ltr"><<a href="mailto:sguelton@quarkslab.com" target="_blank">sguelton@quarkslab.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Nov 06, 2015 at 11:58:22AM +0000, Russell Wallace via llvm-dev wrote:<br>
> Within the LLVM pass manager infrastructure, suppose we have two<br>
> transformation passes, pass A makes some improvements, then pass B does<br>
> likewise, but this creates opportunities for pass A to create further<br>
> improvements (e.g. suppose B was function inlining) so it's desirable to<br>
> run A again.<br>
><br>
> How does the LLVM pass manager currently deal with this?<br>
<br>
</div></div>Some passes are already applied repeatedly by the passmanager, just add<br>
them twice when relevant.<br>
<br>
for instance in lib/Transforms/IPO/PassManagerBuilder.cpp,<br>
PassManagerBuilder::populateModulePassManager<br>
<br>
MPM.add(createGVNPass(...)) is called twice (conditionnaly)<br>
<br>
Hope it helps,<br>
<br>
<br>
</blockquote></div><br></div>