On Thu, Feb 25, 2016 at 11:50 PM, Jeff Law <l...@redhat.com> wrote:
> On 02/25/2016 03:00 AM, Richard Biener wrote:
>>
>>
>> So I fail to see how only successor edges are relevant.  Isn't the
>> important
>> case to catch whether we remove an edge marked EDGE_IRREDUCIBLE_LOOP?
>> Even if the BB persists we might have exposed a new loop here.
>>
>> Note that it is not safe to look at {BB,EDGE}_IRREDUCIBLE_LOOP if the loop
>> state does not have LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS set
>> (the flags may be stale or missing).  So it might be that we can't rely on
>> non-loop passes modifying the CFG to handle this optimistically.
>>
>> Thus, how about (my main point) moving this to remove_edge instead, like
>
> Yea.  That works.  The !loops_state_satisfies_p check will almost certainly
> cause us to trigger loop cleanups more often, but I think it's the
> right/safe thing to do to catch cases where we haven't go the
> IRREDUCIBLE_LOOP flags set.
>
>
> Bootstrapped and regression tested on x86_64-linux-gnu.  OK for the trunk?
>
> Thanks,
> Jeff
>
>
>         PR tree-optimization/69740
>         * cfghooks.c (remove_edge): Request loop fixups if we delete
>         an edge that might turn an irreducible loop into a natural
>         loop.
>
>         PR tree-optimization/69740
>         * gcc.c-torture/compile/pr69740-1.c: New test.
>         * gcc.c-torture/compile/pr69740-2.c: New test.
>

This caused:

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

and may be other build failures in SPEC CPU 2006.


H.J.

Reply via email to