On Tue, Feb 25, 2003 at 05:57:15PM +0100, Michael Matz wrote:
this is merge_moves from ra-colorize.c which has somewhat broken list
handling IMHO.
Hmm, I must have been half asleep, when I wrote that. Although note,
that
with the default setting of flags noone will notice that error, as
web->moves is empty with optimistic coalescing. I'll commit the below
patch, once bootstrapping/regtesting on i686-linux is done (regalloc
branch and HEAD). I'm unclear if I need permission for 3.3.
Thanks for the patch. Another mostly unrelated issue:
The behaviour of the register allocator with the following testcase
(and others) is IMHO suboptimal:
extern void byte_store_op2 (int op, unsigned char *loc, int arg1, int
arg2);
static void
byte_insert_op2 (op, loc, arg1, arg2, end)
int op;
unsigned char *loc;
int arg1, arg2;
unsigned char *end;
{
register unsigned char *pfrom = end;
register unsigned char *pto = end + 1 + 2 * 2;
while (pfrom != loc)
*--pto = *--pfrom;
byte_store_op2 (op, loc, arg1, arg2);
}
With -O2 this testcase gives 7 non-precolored webs that all conflict
with
each other, i.e. the conflict graph is a complete graph with 7 nodes.
With the current code it takes no less than 8 passes to get this graph
colored. The problem is that the allocator allows coalescing between
spill slots and non spill slots.