https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66563
--- Comment #32 from Kazumoto Kojima <kkojima at gcc dot gnu.org> --- (In reply to Oleg Endo from comment #31) Yes, your insn_and_split is quite same with the one I've tried first and it resolved this case too. The volatile will work of cause. The CSE in problem was done by IRA, not by CSE pass, though. Then I'm curious about how other targets handle the issue and found that some targets like arm differentiate GOT sequences for the different constant pool with the similar counter. I like it because it seems that differentiated RTLs fix the root cause of the issue, even though such CSE won't be done after reload. I've just done the usual tests for trunk and will apply it on trunk. Unfortunately 4.9 is now frozen for 4.9.3 release. I'll backport the patch to 4.9 when it reopens.