https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98973
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- Btw, this is likely a latent issue, the store-motion code didn't change since ages and the bisected rev. likely just changed the input to the pass. So the dump difference is -(note 76 75 217 19 [bb 19] NOTE_INSN_BASIC_BLOCK) -(insn 217 76 78 19 (set (reg:SI 3 %r3 [133]) - (reg:SI 2 %r2 [orig:69 ivtmp.24+4 ] [69])) "t.c":11:19 1467 {*movsi_zarch} - (nil)) -(insn 78 217 218 19 (parallel [ - (set (reg:SI 3 %r3 [133]) - (plus:SI (reg:SI 3 %r3 [133]) - (const_int -1 [0xffffffffffffffff]))) - (clobber (reg:CC 33 %cc)) - ]) "t.c":11:19 1821 {*addsi3} - (nil)) -(insn 218 78 79 19 (set (mem/c:SI (reg/f:DI 8 %r8 [103]) [1 c+0 S4 A32]) - (reg:SI 3 %r3 [133])) "t.c":11:19 1467 {*movsi_zarch} - (nil)) -(insn 79 218 83 19 (parallel [ - (set (reg:DI 2 %r2 [orig:69 ivtmp.24 ] [69]) - (plus:DI (reg:DI 2 %r2 [orig:69 ivtmp.24 ] [69]) +(note 76 75 79 19 [bb 19] NOTE_INSN_BASIC_BLOCK) +(insn 79 76 83 19 (parallel [ + (set (reg:DI 3 %r3 [orig:69 ivtmp.24 ] [69]) + (plus:DI (reg:DI 3 %r3 [orig:69 ivtmp.24 ] [69]) (const_int -1 [0xffffffffffffffff]))) (clobber (reg:CC 33 %cc)) ]) "t.c":11:12 1820 {*adddi3} (nil)) (insn 83 79 84 19 (set (reg:CCS 33 %cc) - (compare:CCS (reg:SI 2 %r2 [orig:69 ivtmp.24+4 ] [69]) + (compare:CCS (reg:SI 3 %r3 [orig:69 ivtmp.24+4 ] [69]) (const_int 2 [0x2]))) "t.c":11:12 1415 {*cmpsi_ccs} where you can see that %r2 is no longer decremented but the store (sunk) after the loop still uses %r2: (insn 175 105 218 23 (set (mem/c:SI (reg/f:DI 8 %r8 [103]) [1 c+0 S4 A32]) (reg:SI 2 %r2 [orig:110 c ] [110])) 1467 {*movsi_zarch} (nil)) -- scanning new insn with uid = 175. STORE_MOTION insert store at start of BB 26: (insn 175 105 0 26 (set (mem/c:SI (reg/f:DI 103) [1 c+0 S4 A32]) (reg:SI 110 [ c ])) -1 (nil)) I'll note the gcse dumps are after RA but the store-motion dump is pre-RA.