[Bug rtl-optimization/9553] No induction variable elimination

rakdver at atrey dot karlin dot mff dot cuni dot cz gcc-bugzilla@gcc.gnu.org
Sun Sep 12 06:36:00 GMT 2004


------- Additional Comments From rakdver at atrey dot karlin dot mff dot cuni dot cz  2004-09-12 06:36 -------
Subject: Re:  No induction variable elimination

Hello,

> ------- Additional Comments From pinskia at gcc dot gnu dot org  2004-09-12 01:53 -------
> It is only semi fixed on the mainline:
>   ivtmp.7 = &b[0];
> 
> <L0>:;
>   *(ivtmp.7 - &b[0] + &a[0]) = *ivtmp.7;
>   ivtmp.7 = ivtmp.7 + 4B;
>   T.22 = &b[0] + 80B;
>   if (ivtmp.7 != T.22) goto <L0>; else goto <L2>;
> 
> See how we use the same IV over and over and have it offsetof b instead of by 0.

which indeed is optimal code on many architectures; &a[0] - &b[0]
probably cannot be computed in compile time, but even if it has to be
computed in runtime and *(reg + reg) addressing mode needs to be used,
this has the same computation cost and lower register pressure than
creating a second induction variable.

This of course is not necessarily true on architectures with limited
set of addressing modes; if this happens on such architectures, ivopts
cost function needs to be tweaked.

Zdenek


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9553



More information about the Gcc-bugs mailing list