> > Andrew Pinski <[EMAIL PROTECTED]> writes: > > > > > > > > > > > Hi, > > > > > thanks for testing. I've bootstrapped/regtested this variant of patch > > > > > and comitted it as obvious. > > > > > > > > Since this is an insn, we should not be copying it as it is just a link > > > > to that > > > > insn. > > > > > > > > Attached is a patch which fixes the ICE though I have not bootstrapped > > > > and tested > > > > it yet. > > > > > > Lets try to attach the patch this time. > > > > It seems to me this code should just be > > > > for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) > > if (REG_NOTE_KIND (link) != REG_LABEL) > > { > > if (GET_CODE (link) == EXPR_LIST) > > REG_NOTES (new) > > = gen_rtx_EXPR_LIST (REG_NOTE_KIND (link), > > copy_rtx (XEXP (link, 0)), REG_NOTES (new)); > > else > > REG_NOTES (new) > > = gen_rtx_INSN_LIST (REG_NOTE_KIND (link), > > copy_rtx (XEXP (link, 0)), REG_NOTES (new)); > > } > > > > What do we expect to find in a REG_NOTE that requires the machinery of > > copy_insn_1? And calling copy_insn_1 without going through copy_insn > > looks very wrong. > > Here is a better patch which also speeds up this code by fixing up > the libcall notes in that loop. > > I tested it on the preprocessed source that Andreas sent me but > I don't have time to do a full bootstrap till tommorrow. > > ChangeLog: > > * emit-rtl.c (emit_copy_of_insn_after): Copy REG_LIBCALL note specially. > Copy REG_RETVAL not specially and fix it and the referencing > REG_LIBCALL note. > Use copy_rtx instead of copy_insn_1 for EXPR_LIST note. > Abort if we get a INSN_LIST for the note. > > Thanks, > Andrew Pinski
Also I should mention, this also fixes a possible bug with libcalls that are embedded in one another. Before we were just assuming if we have a REG_RETVAL, then the previous REG_LIBCALL would be the start of the libcall but that would be incorrect with embedded libcalls. Thanks, Andrew Pinski