https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63661
--- Comment #20 from Martin Jambor <jamborm at gcc dot gnu.org> --- So had a look at what my tiny bit in IRA does with this testcase and while it certainly triggers the bug, I don't think it causes it. It performs exactly the same modifications as when -mtune=nehalem is not specified on the command line. The functions I introduced split life-ranges of three registers, an SI mode one, DF mode one and a DI mode one. The bug occurs when both the latter two (DF and DI mode) are split. One suspicious thing is that in the nehalem case, the DF register is assigned to r12 (as opposed to a stack spill in the non-nehalem case) but I think that register is killed before being used, and (coincidentally?) it is being overwritten by the value from the DI-life-split register (r15) - in what seems like another effort of IRA to split their life-range but with one crucial instruction being lost (as in not present after reload). I'm afraid I'll need help of someone who knows IRA, Vladimir, could you please have a look at what happens in function bar during IRA and reload?