https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120459
Jeffrey A. Law <law at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |DUPLICATE Status|UNCONFIRMED |RESOLVED --- Comment #5 from Jeffrey A. Law <law at gcc dot gnu.org> --- Same core issue. We have this in IRA: (insn 527 536 655 6 (set (reg:DF 276 [ _215 ]) (float:DF (reg:DI 1174 [ MEM[(long int *)&bi + 16B] ]))) "j.c":101:55 167 {floatdidf2} (expr_list:REG_DEAD (reg:DI 1174 [ MEM[(long int *)&bi + 16B] ]) (nil))) (reg 1174) does not get a hard register in the context where this use appears. So we turn (reg 1174) into a (mem (fp) (offset)) In the .reload dump: Changing pseudo 1174 in operand 1 of insn 527 on equiv [frame:DI+0x18] [ ... ] Inserting insn reload before: 1693: r2060:DI=[frame:DI+0x18] LRA iterates to do final resolutions. Initially the offset fits, but as further spills occur the offset no longer fits: 1693: r2060:DI=[r2652:DI] Inserting insn reload before: 2294: r2652:DI=frame:DI+0x808 Giving us: (insn 2294 536 1693 6 (set (reg:DI 10 a0 [2652]) (plus:DI (reg/f:DI 2 sp) (const_int 2056 [0x808]))) "j.c":101:55 7 {*adddi3_const_sum_of_two_s12} (nil)) (insn 1693 2294 527 6 (set (reg:DI 9 s1 [2060]) (mem:DI (reg:DI 10 a0 [2652]) [3 MEM[(long int *)&bi + 16B]+0 S8 A64])) "j.c":101:55 277 {*movdi_64bit} (nil)) (insn 527 1693 1694 6 (set (reg:DF 38 ft6 [orig:276 _215 ] [276]) (float:DF (reg:DI 9 s1 [2060]))) "j.c":101:55 167 {floatdidf2} (nil)) Where insn 2294 will get split creating the scenario reported by Paul-Antoine. The testcase in the more recently filed bug is easier to follow. So we'll use that bug going forward. *** This bug has been marked as a duplicate of bug 120811 ***