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