Hi,
I've rebuilt again everything from scratch with the changes to
emit_copy_of_insn_after as Jan suggested (see patch below) and the
ICE caused by quadratic accumulation of the counter of scratch
registers is gone!
Thanks,
Vladimir
Index: emit-rtl.c
===================================================================
--- emit-rtl.c (revision 120004)
+++ emit-rtl.c (working copy)
@@ -5296,16 +5306,16 @@
if (REG_NOTE_KIND (link) != REG_LABEL)
{
if (GET_CODE (link) == EXPR_LIST)
- REG_NOTES (new)
- = copy_insn_1 (gen_rtx_EXPR_LIST (REG_NOTE_KIND (link),
- XEXP (link, 0),
- REG_NOTES (new)));
+
+ REG_NOTES (new)
+ = gen_rtx_EXPR_LIST (REG_NOTE_KIND (link),
+ copy_insn_1 (XEXP (link, 0)), REG_NOTES (new));
else
- REG_NOTES (new)
- = copy_insn_1 (gen_rtx_INSN_LIST (REG_NOTE_KIND (link),
- XEXP (link, 0),
- REG_NOTES (new)));
- }
+ REG_NOTES (new)
+ = gen_rtx_INSN_LIST (REG_NOTE_KIND (link),
+ copy_insn_1 (XEXP (link, 0)), REG_NOTES (new));
+
+ }
/* Fix the libcall sequences. */
if ((note1 = find_reg_note (new, REG_RETVAL, NULL_RTX)) != NULL)
if (GET_CODE (link) == EXPR_LIST)
#if 1
REG_NOTES (new) =
gen_rtx_EXPR_LIST (REG_NOTE_KIND (link),
copy_insn_1 (XEXP (link, 0)), REG_NOTES (new));
#endif
#if 0
REG_NOTES (new)
= copy_insn_1 (gen_rtx_EXPR_LIST (REG_NOTE_KIND (link),
XEXP (link, 0),
REG_NOTES (new)));
#endif
else
#if 0
REG_NOTES (new)
= copy_insn_1 (gen_rtx_INSN_LIST (REG_NOTE_KIND (link),
XEXP (link, 0),
REG_NOTES (new)));
#endif
#if 1
REG_NOTES (new) =
gen_rtx_INSN_LIST (REG_NOTE_KIND (link),
copy_insn_1 (XEXP (link, 0)), REG_NOTES (new));
#endif
}
On 12/19/06, Jan Hubicka <[EMAIL PROTECTED]> wrote:
> Hi, Jan,
> Thanks for fast response!
>
> I've tested the change you proposed and we still failed in the assert
> checking that the number of SCRATCHes being too large (>30) while
> copying the REG_NOTES of the instruction (see below) using just 9
> SCRATCH registers.
Hi,
apparently there seems to be another reason copy_insn_1 can do quadratic
amount of work except for this one, I don't seem to be able to see any
however. Just for sure, did you updated both cases of wrong recursion,
the EXPR_LIST I sent and the INSN_LIST hunk just bellow?
Otherwise probably adding a breakpoint on copy_insn_1 and seeing how it
manage to do so many recursions will surely help :)
Honza