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: Question concerning loop-iv package


Hello,

Attached is the new version of the unrolling addressing optimization patch 
I intend to submit.
We added a new functionality which  takes care of moving the 
initialization of the base addr (addr =&a[i])
to the preheader in case of unrolling.

For simplicity the diff of loop-iv.c file includes your patches -
(http://gcc.gnu.org/ml/gcc-patches/2004-04/msg00177.html,
http://gcc.gnu.org/ml/gcc-patches/2004-04/msg01740.html); together with 
the adjustments
I made on the last patch as was mentioned in my previous email.

Thanks,
Revital











Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
28/05/2004 18:46
 
        To:     Revital Eres/Haifa/IBM@IBMIL
        cc: 
        Subject:        Re: Question concerning loop-iv package


Hello,

> I am using the loop-iv package; which includes your latest patches; to 
get 
> the initialization expression of an induction variable.
> (The patches are - 
http://gcc.gnu.org/ml/gcc-patches/2004-04/msg00177.html
> , http://gcc.gnu.org/ml/gcc-patches/2004-04/msg01740.html)
> 
> In some cases the initialization  expression I get from iv->base is not 
> well formed which causes an unrecognizable instruction error.
> It seems that the reason for this is that the code uses the insn's equiv 

> notes when analyzing the iv definition. 
> (extracted with find_reg_equal_equiv_note function)

could you please send me the patch with that it causes the problem?

Zdenek

> For example; when compiling the following code on PowerPc:
> 
> typedef unsigned char  uch;
> #  define EXTERN(type, array)  extern type array[]
> EXTERN(uch, inbuf);          /* input buffer */
> 
> int        insize;
> 
> int unlzw()
> {
>   long       posbits;
>   int i;
>   int  e;
>   int  o;
> 
>   e = insize-(o = (posbits>>3));
> 
>   for (i = 0 ; i < e ; ++i) {
>     inbuf[i] = inbuf[i+o];
>   }
> 
>   return 1;
> }
> 
> 
> The expression which represents the definition of the induction variable 

> 131 = inbuf+i   (inbuf[i+o])
> will hold the expr_list of the following insn:
> 
> (insn 293 281 302 3 (set (reg:SI 131)
>         (plus:SI (reg/v:SI 119 [ i ])
>             (reg/f:SI 127))) -1 (nil)
>     (expr_list:REG_EQUAL (plus:SI (reg/v:SI 119 [ i ])
>             (symbol_ref:SI ("inbuf") [flags 0x40] <var_decl 0x402bdd80 
> inbuf>))
>         (nil)))
> 
> While the instruction I actually want is the bold insn. 
> 
> Thanks,
> Revital

Attachment: diff.1_6
Description: Binary data

Attachment: ChangeLog_1_6
Description: Binary data


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