RFC: SMS problem with emit_copy_of_insn_after copying REG_NOTEs

Andrew Pinski pinskia@physics.uc.edu
Sat Dec 30 22:06:00 GMT 2006


> 
> Andrew Pinski <pinskia@physics.uc.edu> 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
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: fixemitrtl.diff.txt
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20061230/834b87b7/attachment.txt>


More information about the Gcc-patches mailing list