On Wed, Nov 30, 2016 at 2:54 PM, Bin Cheng <bin.ch...@arm.com> wrote:
> Hi,
> Loop header PHI defining IV(biv) may not be identified as biv because its 
> increment statement is in (irreducible) inner loop.  Function 
> find_deriving_biv_for_expr doesn't take this into consideration and runs into 
> infinite recursion.  The patch fixes this issue by skipping such loop header 
> PHI.  Bootstrap and test on x86_64 and AArch64, is it OK?

Ok.

Richard.

> BTW, we don't mark such IV as biv because of below code:
>
>       /* If the increment is in the subloop, ignore it.  */
>       incr_bb = gimple_bb (SSA_NAME_DEF_STMT (var));
>       if (incr_bb->loop_father != data->current_loop
>           || (incr_bb->flags & BB_IRREDUCIBLE_LOOP))
>         continue;
>
> I thought twice and this check may be too strict.  Given valid incr_iv 
> returned by simple_iv, we know it behaves just like usual increment IVs.  In 
> other words, though the increment statement is executed multiple times in 
> inner loop, it computes the same result for every iteration.  Anyway this is 
> stage1 work.
>
> Thanks,
> bin
>
> 2016-11-30  Bin Cheng  <bin.ch...@arm.com>
>
>         PR tree-optimization/78574
>         * tree-ssa-loop-ivopts.c (find_deriving_biv_for_expr): Skip loop
>         header PHI that doesn't define biv.
>
> gcc/testsuite/ChangeLog
> 2016-11-30  Bin Cheng  <bin.ch...@arm.com>
>
>         PR tree-optimization/78574
>         * gcc.c-torture/compile/pr78574.c: New test.

Reply via email to