https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108463
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, on the first difference without -g the 2 memories are (gdb) p pending_mem->element () $1 = (mem/c:V4SI (plus:DI (value/c:DI 2:2 @0x39559d8/0x39359d0) (const_int -472 [0xfffffffffffffe28])) [1 S16 A128]) (gdb) p debug_rtx (t) (mem:SI (plus:DI (value/c:DI 2:2 @0x39559d8/0x39359d0) (const_int -264 [0xfffffffffffffef8])) [1 S4 A128]) where they use the same VALUE and so it is clear that there is no overlap between them. value/c 2:2 is SP_DERIVED_VALUE_P value with no locs, introduced in r10-7515-g2c0fa3ecf70d199af. While with -g we see on the same case: (gdb) p debug_rtx (pending_mem->element ()) (mem/c:V4SI (plus:DI (value/c:DI 2:2 @0x3958808/0x3938800) (const_int -472 [0xfffffffffffffe28])) [1 S16 A128]) $3 = void (gdb) p debug_rtx (t) (mem:SI (plus:DI (value:DI 3:3946 @0x3958820/0x3938830) (const_int 120 [0x78])) [1 S4 A128]) where value/c 2:2 is the same thing, and value 3:3946 has a single loc with loc (reg/f:DI 7 sp) and setting insn (insn/f 1250 1002 1251 2 (parallel [ (set (reg/f:DI 7 sp) (plus:DI (reg/f:DI 7 sp) (const_int -384 [0xfffffffffffffe80]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) "pr106746.c":15:1 1344 {pro_epilogue_adjust_stack_add_di} (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_CFA_ADJUST_CFA (set (reg/f:DI 7 sp) (plus:DI (reg/f:DI 7 sp) (const_int -384 [0xfffffffffffffe80]))) (nil)))) Now, there are only 2 sp changing instructions, 1250 doing sp = sp - 384 and another one in the epilogue sp = sp + 384. Both of the values are created early when seeing the 1250 instruction: cselib lookup (scratch) => 1:43 cselib value 2:2 0x463f520 (reg/f:DI 7 sp) cselib lookup (reg/f:DI 7 sp) => 2:2 cselib value 3:3946 0x463f550 (plus:DI (reg/f:DI 7 sp) (const_int -384 [0xfffffffffffffe80])) in both -g and -g0 cases.