On Tue, Sep 28, 2021 at 6:13 PM Aldy Hernandez <[email protected]> wrote: > > > > On 9/28/21 6:05 PM, Richard Biener wrote: > > On September 28, 2021 5:45:52 PM GMT+02:00, Jeff Law via Gcc-patches > > <[email protected]> wrote: > >> > >> > >> On 9/28/2021 7:53 AM, Aldy Hernandez wrote: > >>> > >>> > >>> On 9/28/21 3:47 PM, Jeff Law wrote: > >>>> > >>>> > >>>> On 9/28/2021 3:45 AM, Aldy Hernandez wrote: > >>>>> In analyzing PR102511, it has become abundantly clear that we need > >>>>> better debugging aids for the jump threader solver. Currently > >>>>> debugging these issues is a nightmare if you're not intimately > >>>>> familiar with the code. This patch attempts to improve this. > >>>>> > >>>>> First, I'm enabling path solver dumps with TDF_THREADING. None of the > >>>>> available TDF_* flags are a good match, and using TDF_DETAILS would > >>>>> blow > >>>>> up the dump file, since both threaders continually call the solver to > >>>>> try out candidates. This will allow dumping path solver details > >>>>> without > >>>>> having to resort to hacking the source. > >>>>> > >>>>> I am also dumping the current registered_jump_thread dbg counter used > >>>>> by the registry, in the solver. That way narrowing down a problematic > >>>>> thread can then be examined by -fdump-*-threading and looking at the > >>>>> solver details surrounding the appropriate counter (which the dbgcnt > >>>>> also dumps to the dump file). > >>>>> > >>>>> You still need knowledge of the solver to debug these issues, but at > >>>>> least now it's not entirely opaque. > >>>>> > >>>>> OK? > >>>>> > >>>>> gcc/ChangeLog: > >>>>> > >>>>> * dbgcnt.c (dbg_cnt_counter): New. > >>>>> * dbgcnt.h (dbg_cnt_counter): New. > >>>>> * dumpfile.c (dump_options): Add entry for TDF_THREADING. > >>>>> * dumpfile.h (enum dump_flag): Add TDF_THREADING. > >>>>> * gimple-range-path.cc (DEBUG_SOLVER): Use TDF_THREADING. > >>>>> * tree-ssa-threadupdate.c (dump_jump_thread_path): Dump out > >>>>> debug counter. > >>>> OK. > >>>> > >>>> Note we've got massive failures in the tester starting sometime > >>>> yesterday and I suspect all the threader work. So I'm going to > >>>> slow down on reviews of that code as we stabilize stuff. > >>> > >>> Fair enough. Let's knock those out then. > >> So several are failing gcc.dg/loop-unswitch-3.c. > >> > >> This test appears to be verifying that we unswitch a test in one of the > >> loops, which is no longer happening after the change to replace the VRP > >> threader with the hybrid forward threader. > >> > >> So both the old VRP threader and the new style identify and realize a > >> single jump thread. > >> > >> In the old VRP threader realization of the jump thread ends up creating > >> nested loops. In the new implementation we end up creating a single > >> loop with two back edges to the header. > >> > >> ie, the (partial) graphs look like this > >> > >> OLD > >> > >> 1<--+ > >> | | > >> +-> 2 | > >> | / \ | > >> | 3 4 | > >> +- + +-+ > >> > >> NEW > >> > >> > >> +-> 2 <-+ > >> | / \ | > >> | 3 4 | > >> +- + +-+ > >> > >> > >> I wonder if we're not doing proper loop fixups or something similar > >> after that change. IIRC we have/had bits in the copier and CFG update > >> code to mark the loops that need re-analysis and fixing up. > >> > >> Anyway, you should be able to trigger and analyze with a cross compiler. > >> > >> I've got to switch to my day job, but I'll pass along more as I get a > >> chance to look at them. > > > > If you're stuck I'm also happy to help. Note that relying on loop fixup is > > almost never good because we easily lose track of loop association of info > > like OMP simd loops and all loop pragmas. > > I could absolutely use the help here. Care to take a look?
Any hint on which target FAILs gcc.dg/loop-unswitch-3.c? Richard. > Aldy >
