------- Comment #2 from vmakarov at redhat dot com  2008-11-27 20:32 -------
  The problem was in violation of allocno order in regno_allocno_map list. 
This order is very important for many algorithms (allocno info propagation,
conflict propagation and IR flattening).  For example,

loop 0:
     no usage of R
  loop 1:
     a1 representing R
  loop 2:
     a2 representing R

After removing Loop1, we move a1 to loop 0.  Allocnos on upper levels should be
after allocnos on lower levels in regno_allocno_map list.  Before removing loop
we had a1 a2 in the list which is ok because they are on the same loop level. 
After removing loop 1, we have again a1 and a2 which is not ok because a1 now
corresponds to loop 0 containing loop 1 and as a consequence should be after
a2.

  We had no problem before the patch because we removed always a loop and all
its subloops (removing loops based on register pressure) and the order
violation was not possible.

  I'll submit a patch solving the problem today.


-- 


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

Reply via email to