[llvm-dev] RFC: Switching to the new pass manager by default

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Wed Oct 25 10:42:26 PDT 2017


On 10/25/2017 12:21 PM, Xinliang David Li wrote:
>
>
> On Wed, Oct 25, 2017 at 10:19 AM, Hal Finkel <hfinkel at anl.gov 
> <mailto:hfinkel at anl.gov>> wrote:
>
>
>     On 10/25/2017 12:16 PM, Xinliang David Li via llvm-dev wrote:
>>
>>
>>     On Tue, Oct 17, 2017 at 11:50 PM, Chandler Carruth via llvm-dev
>>     <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>>         Greetings everyone!
>>
>>         The new pass manager is getting extremely close to the point
>>         where I'm not aware of any significant outstanding work
>>         needed, and I'd like to see what else would be needed to
>>         enable it by default. Here are the current functionality I'm
>>         aware of outstanding:
>>
>>         1) Does not do non-trivial loop unswitching. Majority of this
>>         is in https://reviews.llvm.org/D34200
>>         <https://reviews.llvm.org/D34200> but will need one or two
>>         small follow-ups.
>>
>>         2) Currently, sanitizers don't work correctly with it. Thanks
>>         to the work of others, the missing infrastructure has been
>>         added and I'll send a patch to wire this up this week.
>>
>>         3) Missing support for 'optnone'. I've been working on this,
>>         but the existing testing wasn't as thorough as I wanted, so
>>         it is going slowly. I've got about 1/4 of this implemented
>>         and should have patches this week or next.
>>
>>         4) Missing opt-bisect (or similar) facility. This looks
>>         pretty trivial to add, but I've not even started. If anyone
>>         is interested in it, go for it. We might even be able to do
>>         something simpler using the generic debug counters and get
>>         equivalent functionality.
>>
>>         ... that's it?
>>
>>
>>
>>     Missing support of 'print-after-all' or 'print-after-passX'  is
>>     another major usability loss.
>>
>>     Regarding the default switch, maybe do it in two steps:
>>
>>     1) Switch the default for PGO build first
>>     2) Switch the default for all modes.
>
>     Why?
>
>
> 1) PGO users benefit from the PM change the most
> 2) I suppose incremental changes are always better and causes fewer 
> churns?

I'm somewhat nervous about having the PGO builds differ so much from the 
non-PGO builds. My thought is that: (Significant) regressions in 
execution performance or compile time need to be fixed regardless. Maybe 
there's some flexibility on code-size regressions (e.g., such that we 
could delay the transition for -Oz if necessary)?

  -Hal

>
> David
>
>      -Hal
>
>>
>>     David
>>
>>
>>
>>         Optimization quality / run-time performance:
>>         - We've been using it at Google extensively and are very
>>         happy with the optimization quality. Benchmarks look *very*
>>         good here.
>>         - More data from other users would be important.
>>         - You can try it out with `-fexperimental-new-pass-manager`
>>         to Clang
>>
>>         Compile-time performance:
>>         - Sometimes *much* better due to cached analyses.
>>         - Sometimes worse, typically due to more / different inlining
>>         in turn running main pipeline (GVN + InstCombine) more times
>>         or over more code.
>>         - Overall somewhat a wash, but the increased compile times
>>         typically due to the optimizer "trying" harder, so not too
>>         concerning on our end.
>>         - Again, more feedback from other users good:
>>         `-fexperimental-new-pass-manager` to Clang
>>
>>         Once the four missing things land, I'll also happily work on
>>         collecting some of the basics on the test-suite and CTMark.
>>         But I suspect more "in the wild" data would really be useful
>>         here given the significance of the change.
>>
>>         Thoughts? What else (beyond the four items above and feedback
>>         on run-time and compile-time) would folks like to see?
>>
>>         Once this happens, I'll also be preparing some batch,
>>         mechanical updates to the test suite to primarily use the new
>>         pass manager. Also there is lots of documentation updates
>>         that will be needed here.
>>
>>         -Chandler
>>
>>         PS: I'll be sending a note to cfe-dev as a "heads up" about
>>         this discussion as in some ways, the default flip is mostly a
>>         Clang default flip. But hopefully our doc updates will
>>         trigger this being "perceived" as the default for other
>>         frontends, and I'll try to reach out to other major frontends
>>         as well (Swift and Rust are on my radar, and I've already
>>         started talking with Philip Reames about their Falcon JIT).
>>
>>         _______________________________________________
>>         LLVM Developers mailing list
>>         llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>         http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>
>>
>>
>>
>>     _______________________________________________
>>     LLVM Developers mailing list
>>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>     -- 
>     Hal Finkel
>     Lead, Compiler Technology and Programming Languages
>     Leadership Computing Facility
>     Argonne National Laboratory
>
-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171025/d911c205/attachment.html>


More information about the llvm-dev mailing list