<div dir="ltr">With respect to Os/Oz, it seems to me that what is controlled by the attribute can largely be orthogonal to the actual passes that are executed.<div><br></div><div>In this sense the attributes (optnone, minsize, optsize) conveys "optimizations hints", which can largely be orthogonal to how the pass pipeline is set up. </div><div>Of course, with this view the "minsize" attribute shouldn't have much effect when setting up an O0 kind of pass pipeline.</div><div><br></div><div>On the other hand, I have a hard time seeing O1/O2/O3 encoded in the IR: I see these very much as pass pipeline setup. Encoding this in the IR would also be hard to reconcile with how we've been doing LTO. But I'd be interested to see a more detailed RFC if anyone wanted to look into this.</div><div><br></div><div>-- </div><div>Mehdi</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Nov 12, 2021 at 12:04 PM Arthur Eubanks via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Currently in the LLVM IR optimization pipelines we pass around an OptimizationLevel, which consists of a speedup level and a size level (e.g. -O1 is {1, 0}, -Oz is {2, 2}). We use the size level to turn on/off some passes and also to determine inliner thresholds.<div><br></div><div>When attempting to add support for -Os/-Oz in <a href="https://reviews.llvm.org/D113738" target="_blank">https://reviews.llvm.org/D113738</a>, I got some pushback saying that we should be relying on the function attributes minsize and optsize. The logical extension of that is to completely remove the size level from OptimizationLevel and rely on frontends to set minsize/optsize for -Os/-Oz. Passes that are disabled with -Os/-Oz can check those attributes instead.</div><div><br></div><div>There are some tests (e.g. inline-optsize.ll) that test that if we have optsize and -Oz, the lower inlining threshold (-Oz in this case) wins, but perhaps we can revisit that and calculate inline thresholds purely based on the function attributes.</div><div><br></div><div>Any thoughts?</div></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>