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]

Re: [PATCH GCC][rework]Improve loop bound info by simplifying conversions in iv base


On Thu, Aug 27, 2015 at 6:54 PM, Ajit Kumar Agarwal
<ajit.kumar.agarwal@xilinx.com> wrote:
>
>
> -----Original Message-----
> From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches-owner@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
I don't quite get the meaning about "If the base value assigned is
unsigned...".  The conversion comes from following C standard's type
promotion for induction variables which have signed type smaller than
int.

Thanks,
bin
> 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.cheng@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.cheng@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.


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