https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90275

Jeffrey A. Law <law at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |law at redhat dot com

--- Comment #10 from Jeffrey A. Law <law at redhat dot com> ---
So the failure here is definitely related to the nop-moves in the IL.

In simplest terms cse_insn will invalidate the destination of the nop-set. 
That sets is REG_QTY to a magic value that indicates its no longer valid.

Then we call insert_regs which is going to walk the value chain.  When that
walk encounters the same reg in the value chain, but with an invalid REG_QTY we
ICE.

The simplest solution here is to handle nop register moves in a manner similar
to nop memory moves.  The only complication in a hunk of code that changes the
source of a nop set to reference a different register from the value chain. 
The idea here is to have their lifetimes abut rather than overlap.

I think we can just put the nop register handling right after that code which
will resolve all these issues.

Reply via email to