<div dir="ltr">Hi,<div><br></div><div>Has anyone gathered statistics on reference workloads (*) for (transformation) passes</div><div>that are enabled / run by default (e.g., -O3) but most of the</div><div>time _don't_ do any effective transformation?</div><div>Even better if we also have such statistics for passes that are _not_ enabled by default</div><div>(e.g., loop fusion, distribution, interchange, NewGVN).</div><div><br></div><div>And yet even better if people have some idea / data for the reason for ineffectiveness.</div><div>Bad heuristics / decision-making? Are some of these transformations useless most of the time?</div><div>Or maybe they are useful but their implementation in LLVM is not powerful enough. Or maybe</div><div>they incur a significant compile-time overhead.</div><div><br></div><div>If not, it would also be helpful if anyone who has tried gathering similar statistics has any</div><div>advice on how to approach it (my rough idea is initially</div><div>use --print-changed / --print-after-all on these workloads for -O3 and then try to</div><div>slide in passes that are not enabled by default; although that's harder to do it right).</div><div><br></div><div>@Hideto: In the last LLVM meeting you gave a related talk [1]. Do you maybe have<br></div><div>the full statistics and / or ways to reproduce them?</div><div><br></div><div>Best,</div><div>Stefanos</div><div><br></div><div>(*)  SPEC, Polybench, Cryptographic libraries, Genome alignment, Image Processing, Graph Processing, Web browsers, databases like sqlite etc.</div><div><br></div><div>[1] <a href="https://www.youtube.com/watch?v=QvF68tOt_w8">https://www.youtube.com/watch?v=QvF68tOt_w8</a></div></div>