On Tue, Feb 9, 2010 at 6:01 PM, Cristianno Martins
<cristiannomart...@gmail.com> wrote:
> Hi everyone,
>
> First of all, I already find [and fix] the problem that I had
> described in the last email.
> Now, I need a help with a pretty intriguing issue, described below.
>
> Well, such as I told in the last email, I'm working on a
> implementation of a heuristic for loop skewing transformation. To
> expose the issue, I will show how it happens with an example.
>
> First, the code used to compile is very simple, and can be seen below
> (the matrix dimensions were minimized for simplification).
> <code>
>  #define m 20
>  #define n 30
>  int a[m][n];
>  int main() {
>     int i, j;
>     for(i = 0; i < m; i++)
>        for(j = 0; j < n; j++)
>           a[i][j] = 1;
>
>     return a[1][1] + a[2][2];
>  }
> </code>
>
> After the skewing pass, if I call
>
> <code>
>  cloog_prog_clast pc = scop_to_clast (scop);
>  printf ("\nCLAST generated by CLooG: \n");
>  print_clast_stmt (stdout, pc.stmt);
> </code>
>
> I get the following result:
>
> <terminal>
>  CLAST generated by CLooG:
>  for (scat_1=0;scat_1<=48;scat_1++) {
>     for (scat_3=max(scat_1-29,0);scat_3<=min(scat_1,19);scat_3++) {
>        b[scat_3][scat_1-scat_3] = 1 ;
>     }
>  }
> <terminal>
>
> Going ahead with this, such as can be seen in
> simple_test.c.105t.graphite [attached], the code is correctly
> generated (in gimple), but the important bb is:
>
> <file>
>  <bb 3>:
>      # graphite_IV.5_17 = PHI <0(2), graphite_IV.5_5(9)>
>      # .MEM_37 = PHI <.MEM_13(D)(2), .MEM_38(9)>
>      D.3185_12 = graphite_IV.5_17 + 0x0ffffffe3;
>      D.3186_11 = MAX_EXPR <D.3185_12, 0>; # this is the line in question

It looks like D.3185 is unsigned.

Richard.

>      D.3187_23 = MIN_EXPR <graphite_IV.5_17, 19>;
>      D.3188_24 = D.3187_23 + 1;
>      D.3189_25 = D.3186_11 < D.3188_24;
>      if (D.3189_25 != 0)
>        goto <bb 4>;
>      else
>        goto <bb 8>;
> </file>
>
> Curiously, the line marked above doesn't work in assembly. The
> D.3186_11 is assigned to -29, although zero is greater than that, and
> the code inside the loop body never runs.
> Moreover, If I get the clast code generated by cloog after the skewing
> (above), and put it on the source file (compiling without skeking),
> the max expr appears in gimple as an if statement, and the code
> executes perfectly.
>
> Does someone have any idea how could I fix it??
>
> Thanks in advance,
>
> On Sun, Feb 7, 2010 at 7:31 PM, Cristianno Martins
> <cristiannomart...@gmail.com> wrote:
>>
>> Hello everyone,
>>
>> I've working on graphite lately, and I did an loop skewing
>> implementation, starting from the loop interchange code [in
>> gcc/graphite-interchange.c].
>> However, after the transformation, if I print the clast generated by
>> Cloog, what I get is a almost the same loop as the original one.
>> Moreover, if I write the pbb transformed domain and scattering into a
>> file, and run the cloog command with that file, the result is exactly
>> what I want from the beggining.
>> For better comprehension of the problem, some interesting data are showed 
>> below.
>>
>> But, first, for short, my question is: am I forgetting something
>> important that I must be doing (like a function call)?
>>
>>
>>> [...]
>>
>> Thanks in advance,
>>
>> --
>> Cristianno Martins
>
> --
> Cristianno Martins
>

Reply via email to