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.