[PATCH GCC]Improve overflow in scev by using information computed in loop niter, part II

Bin.Cheng amker.cheng@gmail.com
Tue May 26 12:19:00 GMT 2015


Hi,
The first part patch improving how we handle overflow in scev is
posted at https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01795.html .
Here comes the second part patch.

This patch does below improvements:
  1) Computes and records control iv for each loop's exit edge.  This
provides a way to compute overflow information in loop niter and use
it in different customers.  It think it's useful, especially with
option -funsafe-loop-optimizers.
  2) Improve chrec_convert by adding new interface
loop_exits_before_overflow.  It checks if a converted IV overflows
wrto its type and loop using overflow information of loop's control
iv.  This basically propagates no-overflow information from control iv
to ivs converted from control iv.  Moreover, we can further improve
the logic by using possible VRP information in the future.

With this patch, cases like scev-9.c and scev-10.c in patch can be
handled now.  Cases reported in PR48052 can be vectorized too.
Opinions?

Thanks,
bin


2015-05-26  Bin Cheng  <bin.cheng@arm.com>

    * cfgloop.h (struct control_iv): New.
    (struct loop): New field control_ivs.
    * tree-ssa-loop-niter.c : Include "stor-layout.h".
    (number_of_iterations_lt): Set no_overflow information.
    (number_of_iterations_exit): Init control iv in niter struct.
    (record_control_iv): New.
    (estimate_numbers_of_iterations_loop): Call record_control_iv.
    (loop_exits_before_overflow): New.  Interface factored out of
    scev_probably_wraps_p.
    (scev_probably_wraps_p): Factor loop niter related code into
    loop_exits_before_overflow.
    (free_numbers_of_iterations_estimates_loop): Free control ivs.
    * tree-ssa-loop-niter.h (free_loop_control_ivs): New.

gcc/testsuite/ChangeLog
2015-05-26  Bin Cheng  <bin.cheng@arm.com>

    PR tree-optimization/48052
    * gcc.dg/tree-ssa/scev-8.c: New.
    * gcc.dg/tree-ssa/scev-9.c: New.
    * gcc.dg/tree-ssa/scev-10.c: New.
    * gcc.dg/vect/pr48052.c: New.



More information about the Gcc-patches mailing list