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]

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


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