This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: -fnew-ra -- which architectures?
- From: Daniel Berlin <dberlin at dberlin dot org>
- To: Falk Hueffner <falk dot hueffner at student dot uni-tuebingen dot de>
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 15 Jul 2002 18:57:34 -0400 (EDT)
- Subject: Re: -fnew-ra -- which architectures?
On 16 Jul 2002, Falk Hueffner wrote:
> Daniel Berlin <dberlin@dberlin.org> writes:
>
> > On 16 Jul 2002, Falk Hueffner wrote:
> >
> > > for which architectures is the new regalloc in the main CVS supposed
> > > to work? I get ICEs for about any nontrivial functions with -fnew-ra
> > > on Alpha...
> >
> > Is your ice in check_df?
> > If so, the problem is because it seems to double add some references,
> > which causes us to abort because the info is obviously inconsistent.
> >
> > (gdb) p df->regs[regno].uses[0].next.next.next.next.next.ref[0]
> > $27 = {reg = 0x40013190, insn = 0x40276400, loc = 0x40273a24, chain = 0x0,
> > type = DF_REF_REG_MEM_LOAD, id = 0, flags = 0}
> >
> > (gdb) p df->regs[regno].uses[0].next.next.ref[0]
> > $28 = {reg = 0x40013190, insn = 0x40276400, loc = 0x40273a24, chain = 0x0,
> > type = DF_REF_REG_MEM_LOAD, id = 0, flags = 0}
>
> Yes, should've mentioned that...
>
> internal compiler error: Internal compiler error in check_df, at ra.c:629
> and
> internal compiler error: Internal compiler error in check_df, at ra.c:637
Yeah, these aren't new-ra problems, they are df.c problems.
ALl the df changes from the new-regalloc-branch haven't been
reviewed/committed yet.
The one that fixes the above is (reversed, since i diffed new-ra to head,
rather than head to new-ra):
*************** df_bb_reg_def_chain_create (df, bb)
*** 1366,1376 ****
{
struct ref *def = link->ref;
unsigned int dregno = DF_REF_REGNO (def);
- /* Don't add ref's to the chain two times. I.e. only add
- new refs. XXX the same could be done by testing if the
current
- insn is a modified (or a new) one. This would be faster.
*/
- if ((unsigned) DF_REF_ID (def) < df->def_id_save)
- continue;
df->regs[dregno].defs
= df_link_create (def, df->regs[dregno].defs);
--- 1345,1350 ----
*************** df_bb_reg_use_chain_create (df, bb)
*** 1420,1430 ****
{
struct ref *use = link->ref;
unsigned int uregno = DF_REF_REGNO (use);
- /* Don't add ref's to the chain two times. I.e. only add
- new refs. XXX the same could be done by testing if the
current
- insn is a modified (or a new) one. This would be faster.
*/
- if ((unsigned) DF_REF_ID (use) < df->use_id_save)
- continue;
df->regs[uregno].uses
= df_link_create (use, df->regs[uregno].uses);