https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212
--- Comment #58 from Kazumoto Kojima <kkojima at gcc dot gnu.org> --- (In reply to Kazumoto Kojima from comment #57) > revised patch for the problem in c#25 I've looked into the remained ICEs for usual sh4-unknown-linux-gnu test and got that they are similar to the ICE in c#25. The original insn is a move insn from/to a memory with base+index addressing which requires r0 for index reg on SH. The other operand of that insn has an equivalence with a memory of which load/store uses r0 for some reason. The tipical example is a memory of which addressing is base+index and base+a_small_display_constant which can fit to mov.[bwl] r0,@(disp,rm)/@(disp,rm),r0 instructions. The patch introduces a new tergetm fuction and hides equivalences for such cases. The default tergetm fuction simply do nothing and shouldn't impact the other targets. The patch might be a bit overkill for SH. We need to see the code quality. With c#29 + c#55 + c#57 patches, all ICEs went away on sh4-linux. compare_tests against trunk rev.215912 says -- New tests that FAIL: g++.dg/cpp1y/feat-cxx14.C -std=gnu++1y (test for excess errors) gcc.target/sh/pr50749-sf-postinc-1.c scan-assembler-times fmov.s\\t@r[0-9]+\\\\+,fr[0-9]+ 1 gcc.target/sh/pr50749-sf-postinc-3.c scan-assembler-times fmov.s\\t@r[0-9]+\\\\+,fr[0-9]+ 1 Old tests that failed, that have disappeared: (Eeek!) gcc.dg/atomic/c11-atomic-exec-4.c -Os (internal compiler error) gcc.dg/atomic/c11-atomic-exec-4.c -Os (test for excess errors) libgomp.fortran/udr14.f90 -O3 -g (internal compiler error) libgomp.fortran/udr14.f90 -O3 -g (test for excess errors) -- The first new FAIL looks a test glitch and it turned out that pr50749-sf-postinc-1.c FAILs can be easily fixed. It looks that the LRA change suggested in c#56 is related about the optimization based with equivalences. I'd like to try it on sh-lra.