------- Comment #16 from vmakarov at redhat dot com  2008-08-30 18:52 -------
This is an analysis of the SPEC2006 degradation.

First of all of thanks for reducing the test.  I really appreciate
this.  Finding it in spec20006 would be very time consuming for me.

The problem looks following
  1. pseudo 80 in the 1st loop gets hard register #2,
     pseudo 153 in the same loop gets hard register #5.
  2. Reload spills pseudo 80 and than assigns it to hard register #5
     through IRA.  Although p80 and p153 in the 1st loop really conflict.

It happens because of wrong flattening regional IR into plain IR done
for reload.  IR flattening is wrong because ira-emit.c (see end of
function ira-emit.c::change_loop) does not rename disjoint live ranges
of p153 in the 1st loop and in another top-level loop.  Again it
happens because p153 in the 1st loop is not in bitmap
mentioned_allocnos.  p153 is not mentioned in the 1st loop (only in
its subloops) but lives through BBs of the 1st loop.

The patch solving the problem will be sent soon.


-- 


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

Reply via email to