> > As discussed in Bugzilla, this is the patch implementing Paolo's > > suggestion of killing REG_EQUAL/REG_EQUIV notes from df_kill_notes. The > > code assumes there is at most one such note per insn. > > That's wrong though and wreaks havoc during reload, e.g.: > > (insn 169 60 62 4 (set (reg:TF 158) > (mem/c:TF (plus:SI (reg/f:SI 101 %sfp) > (const_int -16 [0xfffffffffffffff0])) [3 S16 A64])) > 960513-1.c:13 97 {*movtf_insn_sp32} > (expr_list:REG_EQUIV (mem/c:TF (plus:SI (reg/f:SI 101 %sfp) > (const_int -16 [0xfffffffffffffff0])) [3 S16 A64]) > (expr_list:REG_EQUAL (mult:TF (reg/v:TF 110 [ d ]) > (reg:TF 154)) > (nil)))) > > because the REG_EQUIV note disappears behind reload's back and it isn't > prepared for that. This is the cause of the following regression on SPARC: > > FAIL: gcc.c-torture/execute/960513-1.c execution, -Os
As well as: FAIL: gcc.c-torture/execute/stdarg-2.c execution, -O2 FAIL: gcc.c-torture/execute/stdarg-2.c execution, -O3 -fomit-frame-pointer FAIL: gcc.c-torture/execute/stdarg-2.c execution, -O3 -g FAIL: gcc.c-torture/execute/stdarg-2.c execution, -Os FAIL: gcc.c-torture/execute/stdarg-2.c execution, -O2 -flto -flto-partition=none FAIL: gcc.c-torture/execute/stdarg-2.c execution, -O2 -flto for the exact same reason. -- Eric Botcazou