This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
ix86_address_cost
- From: Zdenek Dvorak <rakdver at atrey dot karlin dot mff dot cuni dot cz>
- To: gcc at gcc dot gnu dot org
- Cc: rth at redhat dot com, jh at suse dot cz
- Date: Sun, 28 Nov 2004 23:06:27 +0100
- Subject: ix86_address_cost
Hello,
what is the purpose of the following code in ix86_address_cost:
/* More complex memory references are better. */
if (parts.disp && parts.disp != const0_rtx)
cost--;
?
It in effect claims that [reg] is more expensive than [reg - 4].
This leads ivopts to generate pretty weird code; for example on code
of type
for (i = 0; i < n; i++)
{
a[i] = something;
b[i] = something;
c[i] = something;
}
it decides that it may be better to use an induction variable with
initial value 1:
for (ivtmp = 1; ivtmp - 1 < n; ivtmp++)
{
a[ivtmp - 1] = something;
b[ivtmp - 1] = something;
c[ivtmp - 1] = something;
}
Since obviously we gain 1 in cost for every use in address, and lose
relatively little on having to express ivtmp - 1.
Zdenek