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]

Proposal for another approach for Loop transformation with conditional in Loops.


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


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