------- 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