-----Original Message-----
From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches-ow...@gcc.gnu.org] On 
Behalf Of Bin Cheng
Sent: Thursday, August 27, 2015 3:12 PM
To: gcc-patches@gcc.gnu.org
Subject: [PATCH GCC][rework]Improve loop bound info by simplifying conversions 
in iv base

Hi,
>>This is a rework for
>>https://gcc.gnu.org/ml/gcc-patches/2015-07/msg02335.html, with review 
>>comments addressed.  For now, SCEV may compute iv base in the form of 
>>>>"(signed T)((unsigned T)base + step))".  This complicates other 
>>optimizations/analysis depending on SCEV because it's hard to dive into type 
>>conversions.  >>This kind of type conversions can be simplified with 
>>additional range information implied by loop initial conditions.  This patch 
>>does such simplification.
>>With simplified iv base, loop niter analysis can compute more accurate bound 
>>information since sensible value range can be derived for "base+step".  For 
>>>>example, accurate loop bound&may_be_zero information is computed for cases 
>>added by this patch.

>>The code is actually moved from loop_exits_before_overflow.  After this 
>>patch, the corresponding code in loop_exits_before_overflow will be never 
>>>>executed, so I removed that part code.  The patch also includes some code 
>>format changes.

>>Bootstrap and test on x86_64.  Is it OK?

The scalar Evolution calculates the chrec ("base" , "+","step") based on chain 
of recurrence through induction variable expressions and 
Propagating the value in SSA representation to derive at the above chrec.. If 
the base value assigned is unsigned and the declaration of 
the base is signed, then only the above chrec is derived based on conversion 
from unsigned to signed? Such type 
conversions can be ignored for the calculation of iteration bound as this 
cannot be overflow in any case. Is the below patch aim at that?

Thanks & Regards
Ajit

Thanks,
bin

2015-08-27  Bin Cheng  <bin.ch...@arm.com>

        * tree-ssa-loop-niter.c (tree_simplify_using_condition_1): Support
        new parameter.
        (tree_simplify_using_condition): Ditto.
        (simplify_using_initial_conditions): Ditto.
        (loop_exits_before_overflow): Pass new argument to function
        simplify_using_initial_conditions.  Remove case for type conversions
        simplification.
        * tree-ssa-loop-niter.h (simplify_using_initial_conditions): New
        parameter.
        * tree-scalar-evolution.c (simple_iv): Simplify type conversions
        in iv base using loop initial conditions.

gcc/testsuite/ChangeLog
2015-08-27  Bin Cheng  <bin.ch...@arm.com>

        * gcc.dg/tree-ssa/loop-bound-2.c: New test.
        * gcc.dg/tree-ssa/loop-bound-4.c: New test.
        * gcc.dg/tree-ssa/loop-bound-6.c: New test.

Reply via email to