Reload patch version 3

Bernd Schmidt crux@pool.informatik.rwth-aachen.de
Fri Aug 28 05:52:00 GMT 1998


> FYI, I just tried to bootstrap the egcs release branch on
> powerpc-unknown-linux-gnu (2.1.118/glibc-2.0.95) and it failed during
> stage1 with the following error:
> 
> ../../../egcs/gcc/caller-save.c:654: Internal compiler error in function
> insert_save_restore

I fixed a bug that could lead to such a failure this morning. Unfortunately
I haven't brought a diff today, but here's what you have to do: in global.c,
find the following piece of code in the function build_insn_chain:

        if (first == basic_block_head[b])
          {
            int regno;
            bzero ((char *)inverse_renumber, sizeof inverse_renumber);
            EXECUTE_IF_SET_IN_REG_SET (basic_block_live_at_start[b],
                                       0, regno,
                                        {
                                          regno_becomes_live (regno, VOIDmode)
                                        });
          }

and move it upwards outside its enclosing if statement, right after the line

     struct insn_chain *c;

There is another bug in reload1.c: in function reload, find the following
fragment:


     CLEAR_REG_SET (spilled_pseudos);
     frame_pointer_needed = 1;
     for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)

and move the line "CLEAR_REG_SET (spilled_pseudos);" upwards, just before the
if statement that reads

        if (caller_save_needed)

I'll send a proper patch on Monday once I have tested this a bit further.

Bernd




More information about the Gcc-patches mailing list