This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]