[llvm-dev] optnone/skipping passes in the new pass manager

Arthur Eubanks via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 8 14:51:43 PDT 2020


On Mon, Jun 8, 2020 at 7:11 AM Robinson, Paul <paul.robinson at sony.com>
wrote:

> When the optnone design was being discussed, Chandler specifically
> rejected having the pass manager involved in the decision (which was the
> original proposed design).  Assuming he still feels the same way now, if
> the existing `skipFunction` calls aren’t being executed under the new pass
> manager, then each pass that has that call will need to be modified
> accordingly (added to the NPM path or moved to some common point).  It
> would be best if the `skipFunction` calls were handled consistently in all
> passes so that it would become part of the normal pass boilerplate.
>
Makes sense, thanks for the background. I'll see if there's a clean way to
make this functionality easy to use in the NPM.

>
>
> I suspect any `skipFunction` or opt-bisection tests have been written to
> force the old pass manager, which is why defaulting to the new pass manager
> doesn’t fail anywhere.
>
I took a closer look at some optnone tests and they use opt instead of
clang. opt still defaults to the legacy pass manager regardless of clang's
default.

> --paulr
>
>
>
> *From:* llvm-dev <llvm-dev-bounces at lists.llvm.org> *On Behalf Of *Arthur
> Eubanks via llvm-dev
> *Sent:* Sunday, June 7, 2020 7:59 PM
> *To:* llvm-dev <llvm-dev at lists.llvm.org>
> *Subject:* [llvm-dev] optnone/skipping passes in the new pass manager
>
>
>
> Looking through some of the remaining test failures under the new pass
> manager, I've narrowed down one of the failures in GWPAsan(!) to the fact
> that the new pass manager doesn't properly skip passes like the old pass
> manager. For example, when a function is marked optnone, or when using
> https://llvm.org/docs/OptBisect.html.
>
>
>
> Lots of passes (e.g. SROA) will do the following under the legacy pass
> manager:
>
>
>
>   bool runOnFunction(Function &F) override {
>     if (skipFunction(F))
>       return false;
>
>     // do pass
>
>   }
>
>
>
> What's the right way to proceed with this? There are 50-100 calls to
> skipFunction() in legacy passes. This doesn't even account for other types
> of IR units, like skipModule(Module&).
>
>
>
> I suppose it's possible to manually go in and add in the same check in the
> new passes, but that seems tedious (and how do you test that at scale?
> clearly there aren't many tests for it right now since check-llvm passes
> under the new pass manager). An alternative of skipping passes at the pass
> manager level would require marking each pass as necessary/optional (I
> think...).
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200608/19f6e81f/attachment.html>


More information about the llvm-dev mailing list