Fix PR64878: do not jump thread across two loop iterations
Jakub Jelinek
jakub@redhat.com
Thu Feb 5 14:46:00 GMT 2015
On Thu, Feb 05, 2015 at 08:21:46AM +0100, Richard Biener wrote:
> On February 4, 2015 10:20:06 PM CET, Sebastian Pop <sebpop@gmail.com> wrote:
> >The attached patch stops the recursion in the detection of FSM
> >jump-threads at
> >loop phi nodes after having visited a loop phi node. This avoids
> >jump-threading
> >two iterations forward that were possible due to a flip-flop operation
> >that
> >exchange the value of the switch control variable as illustrated in the
> >testcase:
> >
> >do {
> > c = read_from_memory;
> > switch (a) {
> > case 0:
> > if (c == ' ')
> > [...]
> > else
> > a = b; // flip-flop
> > break;
> > case 1:
> > a = 0;
> > b = 15; // this will jump-thread to 15
> > break;
> >
> > case 15:
> > [...]
> > }
> >} while (...);
> >
> >The patch has passed bootstrap and regression testing on x86_64-linux.
> >Ok to commit?
>
> But is sounds like a useful optimization?
Only if we could do it reliably. If it isn't fixable in a different way for
GCC 5.0, then I think it is better to live with a possibly
missed-optimization than wrong-code.
Jakub
More information about the Gcc-patches
mailing list