Hello All:

Below examples are the transformation for the given loop in Fig(1). Fig(2) 
unroll and jam and the Fig(3) does the
Code motion to bring two IF adjacent to each other and two while loops adjacent 
to each other.

The Fig(4 ) does the IF-merging and the Loop fusion on the transformed Loop in 
Fig (3) which bring two IF adjacent
and two while Loops adjacent to each other.

This shows how the Loop with conditional branches can be unrolled which enables 
the IF-merging and Loop fusion
after doing code motion to unrolled loops to bring IF and Loops adjacent to 
each other.

This is the powerful optimization which gets enabled with renaming , unrolling.

Such heuristics needs to be added for Loop unrolling and then later the code 
motions can enable the IF-merging
and the Loop fusion for the unrolled loop.

The below example is taken from the article by Albert Cohen et.al.

"Deep Jam : Conversion of Coarse grain Parallelism to Fine grain vector 
parallelism"

For ( I = 0; I < 10; i++)
{
   If(p)
     a = ...;
  While(q)
     .. = a + ...;
}

Fig (1)

For ( I = 0; I < 10; i+=2)
{
    a1 = phi(a,a2);
    If ( p1)
       a1 = ....;
    While (q1)
        ... = a1 + ...;
    If (p2)
      a2  = ...;
   a2 = phi(a2, a1);
   While (q2)
     .... = a2 + ....;

Fig (2)

For ( I = 0; I < 10; i+=2)
{
    a1 = phi(a,a2);
    If ( p1)
       a1 = ....;
   If (p2)
      a2  = ...;
   a2 = phi(a2, a1);
  While (q1)
        ... = a1 + ...;
   While (q2)
     .... = a2 + ....;

Fig (3)

For ( I = 0 ; I < 10; i++)
   a1 = phi(a1,a2);
   If ( p1 && p2)
      a1 = ...;
      a2 = ...;
  Else
    If (p1)
       a1= ....;
   Else
      If (p2)
        a2 = ...;

    While (q1 && q2)
    {
        ... = a1 + ...;
        ... = a2 + .....;
    }
   While (q1)
      ....= a1 + ...;
   While ( q2)
         ..... = a2 + ..;

Fig (4).

I would like to propose the above heuristics for unroll and jam and renaming 
which enables the loop fusion and the IF-merging 
to achieve the optimize code.

This shows how the coarse grain unrolling heuristics enable fine grain Loop 
transformation.

Thoughts Please?

Thanks & Regards
Ajit

Reply via email to