------- Comment #3 from jakub at gcc dot gnu dot org  2007-08-20 18:25 -------
Wow, scheduling plus reload does extremely horrible job here.
This is
  b[0] = {};
  b[0].a.j[0] = 0;
  b[0].a.j[1] = 0;
  b[0].a.j[2] = 0;
  b[0].a.j[3] = 0;
  b[0].a.j[4] = 0;
  b[0].a.j[5] = 0;
  b[0].a.j[6] = 0;
  b[0].a.j[7] = 0;
  b[0].a.j[8] = 0;
  b[0].a.i = 1;
repeated 25 times in *.optimized dump, in *.expand that's 250 stores to b
array,
in the increasing index order and we are storing just 0s or 1s.  So ideally
on IA-64 we would use just 1 reg to store 1, and two or 4 registers to store
pointers and use auto-increment.  But after scheduling we have huge amount of
overlapping live ranges for the many pointer pseudos and reload decides to put
them wherever possible, all kinds of general regs, reg window regs, and after
the dataflow even into b0 without bothering to restore it properly.

Vlad, is your RA capable of handling this more sanely?


-- 

jakub at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vmakarov at gcc dot gnu dot
                   |                            |org


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

Reply via email to