This is the mail archive of the gcc@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: Proposal for another approach for Loop transformation with conditional in Loops.



----------------------------------------
> From: ajit.kumar.agarwal@xilinx.com
> To: law@redhat.com; richard.guenther@gmail.com; gcc@gcc.gnu.org
> CC: vinodk@xilinx.com; shailadi@xilinx.com; vidhum@xilinx.com; nmekala@xilinx.com
> Subject: Proposal for another approach for Loop transformation with conditional in Loops.
> Date: Sun, 15 Mar 2015 04:40:54 +0000
>
> Hello All:
>
> I am proposing the new approach to Loop transformation as given below in the example For the loops with
> conditional expression inside the Loops. The Loop body should be reducible control flow graph. The iteration
> space is partitioned into different spaces for which either the cond_expr is true or cond_expr is false. The
> evaluation of cond_expr for the partitioned iteration spaces can be determined statically. For the partitioned
> iterations and based on the analysis of cond_expr on the partitioned iterations spaces the Loops in fig (a) will
> be transformed to Loops in fig (b).
>
> for the iteration spaces of the conditional inside the loop is live in at the entry of the cond_expr and Live out
> the Control flow graph is topological ordered with the basic blocks for the conditional CFG and the partitioned
> iteration spaces can be formed for which the spaces can be true for conditional expr and false and unknown.
>
> Based on the above info and analysis the Loop of Fig (a) will be transformed to Loop Fig (b).
>
> This is much more optimized code as compared to the performance. The cases will be triggered for SPEC
> Benchmarks. Loops is partitioned to different version with different iteration spaces. Optimized in the presence
> Of the transformed generation of the loops without conditional.
>
> For ( x1= lb1; x1<= ub1; x1++)
> ..
> For(xn= lbn; xn <= ubn; xn++)
> {
>
> V = cond_expr;
> If ( V)
> Code_FOR _THEN;
> Else
> Code_FOR_ELSE;
> }
>
> }
> Fig(a)
>
> /* Loop for cond_expr == true */
> For( x1 = ................................)
> For(xn = ............................)
> CODE_FOR_THEN;
> End
> End
>
> /* Loop for cond_expr == false */
> For ( x1 = ......................)
> For( xn = .......................)
> CODE_FOR_ELSE;
> End
> End
>
> /* Loop for cond_expr == unknown *//
> For ( x1 = ...........................)
> For( xn = ........................
> {
> V = cond_expr;
> If( v)
> CODE_FOR_THEN;
> Else
> CODE_FOR_ELSE;
> }
> }
>
> Fig ( b).
>
> Thoughts Please ?
>
> Thanks & Regards
> Ajit

Ajit,

How different this is from the loop-unswitch pass already in gcc (tree-ssa-loop-unswitch.c)?

-Aditya


 		 	   		  

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