http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50751
--- Comment #28 from Oleg Endo <olegendo at gcc dot gnu.org> 2012-04-19 09:29:41 UTC --- The prophecy in comment #3 finally came true (again) while I was testing the patch for PR 52941 ;) The problem is that when reload tries to swap regs from/to stack, it will try to use the QI/HI displacement addressing patterns to access the stack (which is good). However, if the following insn has an R0 clobber (such as the atomic sequences) reload will bail out instead of introducing another R0 <-> Rn move after the QI/HI load/store in order to satisfy the displacement addressing constraints. I'm now trying to work around this by adding special insn_and_split patterns for the reload phase and removing the displacement addressing special cases in sh_secondary_reload....