https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111225
--- Comment #3 from Vladimir Makarov <vmakarov at gcc dot gnu.org> --- I've reproduced the bug. Just removing `else if (spilled_pseudo_p (op))` for CT_SPECIAL_MEMORY will break a lot targets but this is right that this code is a reason for the bug. I have ideas how to fix it and I'll fix it on the next week.