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.