This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR 51505
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: Andrey Belevantsev <abel at ispras dot ru>
- Cc: gcc-patches at gcc dot gnu dot org, Paolo Bonzini <bonzini at gnu dot org>
- Date: Sun, 29 Jan 2012 16:09:01 +0100
- Subject: Re: [PATCH] Fix PR 51505
- References: <4F16F628.8030002@ispras.ru> <201201291402.25036.ebotcazou@adacore.com>
> > 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