https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109154
--- Comment #39 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Macleod from comment #37)
> Created attachment 54780 [details]
> in progress patch
>
> Well call me a liar.
>
> It took me a while to understand why, but if we leave it to single
> dependencies only, the impact is relatively linear. I wrote a bunch of
> code, then deleted most of it as I found the engine was bypassing my code
> and doing it on its own.
>
> The attached patch is the core. It actually works to a depth of 5
> recomputations. my sample of:
> int a = left * 2;
> int b = a - 4;
> int c = b % 7;
> func (a,b ,c);
> int d = c * 4;
> if (left == 20)
> {
> func (b,c,d);
>
> produces
> <bb 5> :
> func (36, 1, 4);
>
> IT also changes your program somewhat.
>
> Try applying it and see if it does what you want. It bootstraps, regression
> are running.. but based on the minimal code impact, I wouldn't expect
> incorrect failures.
>
> Performance impact on building GCC is barely half a percent in VRP, and
> 0.05% overall compile time. pretty minimal.
>
> Im still working with it to tweak it, I just wanted you to be able to see if
> it helps. I presume we dont want to add a new --param this late in the
> game. But it seems we can set a reasonable number and not run into much
> trouble.
There is no problem with adding --params, and those are always better than
magic numbers.
Btw, I originally wondered why we don't re-compute zone1_12 because it's
in the imports of the successor (OK, the empty successors single successor
block) and expected those to trigger re-computes.