Hi, My 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. Also cases reported in PR48052 now can be vectorized too. Opinions? Thanks, bin 2015-05-26 Bin Cheng * 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 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.