Arthur Eubanks via llvm-dev
2021-Feb-24 19:25 UTC
[llvm-dev] How to get from "opt -O3" to "opt <a-single-pass>" with the new PM?
There's no way to get a list of passes. Currently the name used to specify a pass, e.g. "instcombine" in -passes=instcombine is mostly a one way street to creating the pass, it's hard to go backwards from a pass to the original name due to the implementation. This could be fixed, but it'd be a fairly large change. Personally I'd prefer an addition to https://reviews.llvm.org/D86657 where we dump the IR on a crash to a file. Then with -debug-pass-manager, we can see which pass caused the crash. Then use llvm-reduce to reduce the IR, running only that one pass. On Wed, Feb 24, 2021 at 1:28 AM Florian Hahn <florian_hahn at apple.com> wrote:> > > > On Feb 15, 2021, at 09:33, Mikael Holmén via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > > > > Hi, > > > > I just wrote a PR about a crash that I only see with the new PM: > > https://bugs.llvm.org/show_bug.cgi?id=49185 > > > > Normally (with the old PM) when I get a crash with e.g. "opt -O3" I use > > -debug-pass=Arguments to get the list of passes run, and then I usually > > try to reduce the amount of passes with the goal to reach a simpler opt > > command line just running one pass to get a small and stable > > reproducer. > > > > With the new PM I have no idea how to do this. -debug-pass=Arguments > > doesn't do anything, it doesn't give an error either, it's just silent. > > > > What is the intended workflow to reach a proper nice and small > > reproducer that has a minumum of dependencies towards different passes > > with the new PM? > > Unfortunately there’s nothing similar to bugpoint’s crashing pass > reduction feature that works for the new pass manager at the moment. I am > also not aware of anyone working on this. > > For the new PM, there’s -debug-pass-manager, which prints the passes that > run, but not in a format suitable to feed back to `opt`. > > Arthur, Alina, do you know if there’s a way to get a string of passes that > corresponds to a all passes in a given pipeline, which can be passed > directly to `opt`? With that, it might also be easier to build a > llvm-reduce-based pass reduction tool as well. > > Cheers, > Florian-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210224/b01b610f/attachment.html>
Mikael Holmén via llvm-dev
2021-Feb-25 07:03 UTC
[llvm-dev] How to get from "opt -O3" to "opt <a-single-pass>" with the new PM?
On Wed, 2021-02-24 at 11:25 -0800, Arthur Eubanks wrote:> There's no way to get a list of passes. Currently the name used to > specify a pass, e.g. "instcombine" in -passes=instcombine is mostly a > one way street to creating the pass, it's hard to go backwards from a > pass to the original name due to the implementation. This could be > fixed, but it'd be a fairly large change. > > Personally I'd prefer an addition to https://reviews.llvm.org/D86657 > where we dump the IR on a crash to a file. Then with -debug-pass-manager, we can see which pass caused the crash. Then use llvm-reduce to reduce the IR, running only that one pass. >Ok. So more or less the tool we have is -print-before-all -debug-pass- manager and copy/paste the last input and rerun with the last interesting pass. -print-on-crash makes it a little bit more convenient when a pass crashes. I suppose this will work ok in many cases. Another case is when a number of passes is needed to make a certain pass expose something interesting. Now and then I run into cases where opt -pass1 ... -passN-1 -passN is needed to trigger something and splitting the opt command to opt -pass1 ... -passN-1 | opt passN doesn't expose the problem. And the way I then find the needed passes is to get the passlist with -debug-pass=Arguments and reduce the list as far as I can. This is quite is rare though. Thanks, Mikael> On Wed, Feb 24, 2021 at 1:28 AM Florian Hahn <florian_hahn at apple.com> > wrote: > > > > > On Feb 15, 2021, at 09:33, Mikael Holmén via llvm-dev < > > llvm-dev at lists.llvm.org> wrote: > > > > > > Hi, > > > > > > I just wrote a PR about a crash that I only see with the new PM: > > > https://bugs.llvm.org/show_bug.cgi?id=49185 > > > > > > Normally (with the old PM) when I get a crash with e.g. "opt -O3" > > I use > > > -debug-pass=Arguments to get the list of passes run, and then I > > usually > > > try to reduce the amount of passes with the goal to reach a > > simpler opt > > > command line just running one pass to get a small and stable > > > reproducer. > > > > > > With the new PM I have no idea how to do this. -debug- > > pass=Arguments > > > doesn't do anything, it doesn't give an error either, it's just > > silent. > > > > > > What is the intended workflow to reach a proper nice and small > > > reproducer that has a minumum of dependencies towards different > > passes > > > with the new PM? > > > > Unfortunately there’s nothing similar to bugpoint’s crashing pass > > reduction feature that works for the new pass manager at the > > moment. I am also not aware of anyone working on this. > > > > For the new PM, there’s -debug-pass-manager, which prints the > > passes that run, but not in a format suitable to feed back to > > `opt`. > > > > Arthur, Alina, do you know if there’s a way to get a string of > > passes that corresponds to a all passes in a given pipeline, which > > can be passed directly to `opt`? With that, it might also be easier > > to build a llvm-reduce-based pass reduction tool as well. > > > > Cheers, > > Florian