On Wed, Jul 8, 2015 at 4:46 PM, Ajit Kumar Agarwal
<ajit.kumar.agar...@xilinx.com> wrote:
> All:
>
> While/For ( condition1)
> {
>    Some code here.
>   If(condition2 )
>     continue;
>   Some code here.
> }
>
> Fig(1)
>
> For the above loop in Fig(1)  there will be two backedges and multiple 
> latches.  The below code can be transformed to the below in order to
> have a single backedge.
>
> While/For (condition1)
> {
>    Some code here.
>    If( condition2)
>      Goto latch;
>   Some code here.
>
> Latch:
> }
>
> Fig(2).
>
> With the transformation shown in Fig(2) the presence of GoTo inside loops  
> affect and disables many  optimizations. To enable
> the loops in Fig(1) can also be transformed to multiple loops with each 
> backedge that will make the affected optimizations enabled
> and the transformed Multiple loops will  enable many optimizations that are 
> disabled with the presence of GoTo in Fig(2) and multiple
> latches given in Fig(1).

This is what GCC performs when doing loop_optimizer_init without
LOOPS_MAY_HAVE_MULTIPLE_LATCHES, it will
disambiguate the loop into a nested loop.  We don't have a way to
force a single latch with the goto idea (which might
be useful in some cases as well, for example if the result can be
trivially if-converted).

Richard.

> Thoughts?
>
> Thanks & Regards
> Ajit
>

Reply via email to