https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212
--- Comment #98 from Kazumoto Kojima <kkojima at gcc dot gnu.org> --- (In reply to Oleg Endo from comment #97) > I've compared the results of r227512 without LRA and r227682 with LRA. > Below are the new failures. A typical example of pr64661-x.c regressions is: [LRA] test_37_1: stc gbr,r3 ! 22 store_gbr [length = 2] mova 1f,r0 ! 6 atomic_add_fetchqi_soft_tcb [length = 20] mov #(0f-1f),r1 .align 2 mov.l r0,@(128,gbr) 0: mov.b @(4,r3),r0 ... [no-LRA] test_37_1: mova 1f,r0 ! 6 atomic_add_fetchqi_soft_tcb [length = 20] mov #(0f-1f),r1 .align 2 mov.l r0,@(128,gbr) 0: mov.b @(4,gbr),r0 ... where (define_insn_and_split "atomic_fetch_<fetchop_name><mode>_soft_tcb" [(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r") (match_operand:QIHISI 1 "atomic_mem_operand_1" "=SraSdd")) ... (clobber (reg:SI R0_REG)) (clobber (reg:SI R1_REG))] "TARGET_ATOMIC_SOFT_TCB" { return "\r mova 1f,r0" "\n" " .align 2" "\n" " mov #(0f-1f),r1" "\n" " mov.l r0,@(%O3,gbr)" "\n" "0: mov.<bwl> %1,r0" "\n" ... The .ira dump shows (insn 6 5 7 2 (parallel [ (set (reg:QI 167) (plus:QI (mem/v:QI (plus:SI (reg:SI 144 gbr) (const_int 4 [0x4])) [-1 S1 A8]) (const_int 1 [0x1]))) (set (mem/v:QI (plus:SI (reg:SI 144 gbr) (const_int 4 [0x4])) [-1 S1 A8]) (unspec:QI [ (plus:QI (mem/v:QI (plus:SI (reg:SI 144 gbr) (const_int 4 [0x4])) [-1 S1 A8]) (const_int 1 [0x1])) ] UNSPEC_ATOMIC)) ... which looks the code generated with the old RA. It seems that old RA passes gbr+4 addressing as is but LRA spills gbr with r3 according to the constraint SraSdd. Perhaps LRA is more strict in this regard. I guess that these pr64661-x.c regressions are not so problem, though. I'm not sure whether hiconst.c regression is serious or not. The serious one would be Running target sh-sim/-m2/-mb FAIL: gcc.c-torture/execute/20040709-2.c -Os execution test My sh4-unknown-linux-gnu test also shows another execution errors for libstdc++-v3. New tests that FAIL: 22_locale/money_get/get/wchar_t/14.cc execution test 22_locale/money_get/get/wchar_t/19.cc execution test 22_locale/money_get/get/wchar_t/22131.cc execution test 22_locale/money_get/get/wchar_t/38399.cc execution test 22_locale/money_get/get/wchar_t/39168.cc execution test 22_locale/money_get/get/wchar_t/6.cc execution test 22_locale/money_get/get/wchar_t/8.cc execution test 22_locale/money_get/get/wchar_t/9.cc execution test 22_locale/money_put/put/wchar_t/39168.cc execution test 22_locale/money_put/put/wchar_t/5.cc execution test 22_locale/money_put/put/wchar_t/6.cc execution test These tests compiled with -mlra don't fail with libstdc++-v3 library compiled with -mno-lra, i.e. libstdc++-v3 is miscompiled with -mlra. These wrong code problems should be resolved before witch to LRA.