https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117424

--- Comment #10 from Andrew Macleod <amacleod at redhat dot com> ---
It also works if I use
    --disable-tree-cunroll

which makes me suspicious of cunroll.

It also works if I use 
  --fdisable-tree-evrp --fdisable-tree-vrp1

So I thought perhaps VRP is doing something to mess up cunroll.. however when I
look at the difference coming out of the pass before cunroll with the 2 sets of
options, the only code differences are negligible.  And yet cunroll makes some
very very different decisions.

In theory that leaves global values which are exported by EVRP/VRP.  Given that
turning off VRP1 by itself still causes the failure, that would imply either a
global exported by EVRP, and/or the utilization of SCEV by a VRP pass impacting
a global perhaps.

I then tried it with simply:
  --param=vrp-block-limit=1
which invokes fast VRP, and does not then utilize SCEV/loop analysis.

This also passes on its own, while setting a number of the same globals.   
(albeit will some different values due to the lack of loop info)

I don't see a VRP pass doing anything obviously wrong.  Someone who understands
the cunroll pass can maybe discover what its making such different decisions
(which apparently cause the fault) when disabling evrp and vrp1  (or using fast
vrp)

Reply via email to