[llvm-dev] RFC: Switching to the new pass manager by default
Chad Rosier via llvm-dev
llvm-dev at lists.llvm.org
Thu Oct 26 14:06:01 PDT 2017
Sure, I'll file a bug and investigate a bit in the morning. I'll also
see if I can't find a similar regression with one of the llvm test suite
tests, so it will be easier to reproduce on your end.
On 10/26/2017 4:52 PM, Chandler Carruth wrote:
> I thought most of the extremely superlinear asserts were already
> behind EXPENSIVE_CHECKS, but we can add this one if you have a test
> case. Could you file a bug w/ a test case? I'd also be happy to try
> and just make the verify a bit less egregious. But I don't have that
> version of SPEC....
>
> On Thu, Oct 26, 2017 at 1:16 PM Chad Rosier <mcrosier at codeaurora.org
> <mailto:mcrosier at codeaurora.org>> wrote:
>
> Sorry, by debug build I actually meant asserts enabled. Thus, this
> issue can show up in either a debug or release build, if asserts
> are enabled.
>
>
> On 10/26/2017 4:05 PM, Chad Rosier via llvm-dev wrote:
>>
>> Chandler/All,
>>
>> We've just started testing the new pass manager this week and we
>> ran into a 548x slowdown (i.e., 6.28s to 3443.83s) for one of the
>> files from SPEC2017/blender. The issue arises only in debug
>> builds due to the numerous calls to RefSCC::verify() and
>> SCC::verify() in the LazyCallGraph implementation. Would it make
>> sense to start predicating these calls with the EXPENSIVE_CHECKS
>> macro, rather than NDEBUG?
>>
>> Chad
>>
>>
>> On 10/18/2017 2:50 AM, Chandler Carruth via llvm-dev 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 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?
>>>
>>> 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
>>
>>
>>
>> _______________________________________________
>> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171026/fd7f13c4/attachment.html>
More information about the llvm-dev
mailing list