This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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);





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]