https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83695
--- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> --- On January 9, 2018 6:39:39 PM GMT+01:00, "amker at gcc dot gnu.org" <gcc-bugzi...@gcc.gnu.org> wrote: >https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83695 > >--- Comment #4 from amker at gcc dot gnu.org --- >Given 3-level loop nest: <outer:Loop_1, Loop_2, Loop_3:inner>, the ICE >happens >when estimate_numbers_of_iterations called for the outermost Loop_1. >The >function tries to infer niter information from all stmts inside the >loop. In >this case, the scev_info for variables defined in innermost loop is not >updated >in previous interchange. > >If I deliberately call estimate_numbers_of_iterations for all loops in >nest >before actual interchange, the ICE will be gone. But I am not sure if >this is >the only case outdated scev info in inner loops is used. > >A full fix would be introducing additional interface cleaning up cached >scev >information for variables defined in LOOP from scalar_evolution_info. >And call >the interface for interchanged loops. Given interchange executed for >only >limited times, I guess that won't be too expensive? > >I am testing a patch following the latter method. Just clear all of the cache? Or avoid doing analysis after transform...