Greetings Segher,
I've not sure if I've misunderstanding something in the combine code but
in make_more_copies
for combine.c this seems very odd:
if (!(REG_P (dest) && !HARD_REGISTER_P (dest)))
continue;
rtx src = SET_SRC (set);
if (!(REG_P (src) && HARD_REGISTER_P (src)))
continue;
Is there any good reason we are assuming the destination can't both be a
hard register or a regular code here?
If were making pseudo register copies wouldn't it be:
rtx dest = SET_DEST (dest);
if ((REG_P (dest) && HARD_REGISTER_P (dest)))
continue;
I'm assuming you have good reason for doing both hard and standard
registers checking in this function but
it looks really odd to me for checking both hard and regular registers here,
Nick