------- Comment #6 from pinskia at gcc dot gnu dot org 2006-06-03 02:38 ------- What reassociation is doing is "scheduling" the instructions further down before the use but it exands the life time of some variables.
e.g.: D.1563_59 = rA0_49 * rB0_50; rC0_0_60 = D.1563_59 + rC0_0_516; D.1564_61 = rA1_52 * rB0_50; rC1_0_62 = D.1564_61 + rC1_0_517; D.1565_63 = rA2_54 * rB0_50; rC2_0_64 = D.1565_63 + rC2_0_518; D.1566_65 = rA3_56 * rB0_50; rC3_0_66 = D.1566_65 + rC3_0_519; D.1567_67 = rA4_58 * rB0_50; rC4_0_68 = D.1567_67 + rC4_0_520; into: D.1563_59 = rB0_50 * rA0_49; D.1564_61 = rA1_52 * rB0_50; D.1565_63 = rA2_54 * rB0_50; D.1566_65 = rA3_56 * rB0_50; D.1567_67 = rA4_58 * rB0_50; ..... (with loads, etc here) D.1563_477 = rB0_468 * rA0_466; rC0_0_60 = D.1563_59 + rC0_0_516; rC0_0_82 = rC0_0_60 + D.1563_81; rC0_0_104 = rC0_0_82 + D.1563_103; rC0_0_126 = rC0_0_104 + D.1563_125; rC0_0_148 = rC0_0_126 + D.1563_147; rC0_0_170 = rC0_0_148 + D.1563_169; rC0_0_192 = rC0_0_170 + D.1563_191; rC0_0_214 = rC0_0_192 + D.1563_213; rC0_0_236 = rC0_0_214 + D.1563_235; rC0_0_258 = rC0_0_236 + D.1563_257; rC0_0_280 = rC0_0_258 + D.1563_279; rC0_0_302 = rC0_0_280 + D.1563_301; rC0_0_324 = rC0_0_302 + D.1563_323; rC0_0_346 = rC0_0_324 + D.1563_345; rC0_0_368 = rC0_0_346 + D.1563_367; rC0_0_390 = rC0_0_368 + D.1563_389; rC0_0_412 = rC0_0_390 + D.1563_411; rC0_0_434 = rC0_0_412 + D.1563_433; rC0_0_456 = rC0_0_434 + D.1563_455; rC0_0_478 = rC0_0_456 + D.1563_477; Which in of itself not supressing and not nothing which reassociate should handle special. This is what we get with a semi bad register allocation which does nothing to reduce spilling. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27855