------- Comment #2 from rguenth at gcc dot gnu dot org  2010-06-05 10:47 -------
We have (4.4):

<bb 2>:
  va.f[0] = a->r;
  va.f[1] = a->g;
  va.f[2] = a->b;
  va.f[3] = 0.0;
  pretmp.40 = va.v;
  ivtmp.61 = 0;

<bb 3>:
  att.12 = MEM[base: pre1, index: ivtmp.61] * pre2;
  tmpatt = {att.12, att.12, att.12, att.12};
  tmpatt.66 = __builtin_ia32_mulps (tmpatt, pretmp.40);
  D.3720 = __builtin_ia32_addps (tmpatt.66, MEM[base: lpic, index: ivtmp.61,
step: 4]);
  MEM[base: lpic, index: ivtmp.61, step: 4] = D.3720;
  ivtmp.61 = ivtmp.61 + 4;
  if (ivtmp.61 != 80)
    goto <bb 3>;
  else
    goto <bb 4>;

vs. (4.6):

<bb 2>:
  va$f$0_3 = a_2(D)->r;
  va$f$1_4 = a_2(D)->g;
  va$f$2_5 = a_2(D)->b;

<bb 3>:
  # ivtmp.31_52 = PHI <ivtmp.31_51(3), 0(2)>
  D.4345_11 = MEM[base: pre1_9(D), index: ivtmp.31_52];
  att.1_13 = D.4345_11 * pre2_12(D);
  tmpatt_37 = {att.1_13, att.1_13, att.1_13, att.1_13};
  va.f[0] = va$f$0_3;
  va.f[1] = va$f$1_4;
  va.f[2] = va$f$2_5;
  va.f[3] = 0.0;
  D.4347_16 = va.v;
  tmpatt_38 = __builtin_ia32_mulps (tmpatt_37, D.4347_16);
  D.4350_25 = MEM[base: lpic_20(D), index: ivtmp.31_52, step: 4];
  D.4382_39 = __builtin_ia32_addps (tmpatt_38, D.4350_25);
  MEM[base: lpic_20(D), index: ivtmp.31_52, step: 4] = D.4382_39;
  ivtmp.31_51 = ivtmp.31_52 + 4;
  if (ivtmp.31_51 != 80)
    goto <bb 3>;
  else
    goto <bb 4>;

which means that somehow we were not able to hoist loop invariant stuff.

investigating.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2010-06-05 10:47:29
               date|                            |


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

Reply via email to