[PATCH] Fix wrong register allocation for EH

Vladimir Makarov vmakarov@redhat.com
Tue Nov 11 16:22:00 GMT 2008


Eric Botcazou wrote:
>
> but, while the second part (for abnormal edges) has been transposed in 
> process_bb_node_lives, the first part (for EH edges) hasn't.
>
It looks like the code was removed by the patch

2008-09-04  Richard Sandiford  <rdsandiford@googlemail.com>

    PR middle-end/37243
    * ira-build.c (form_loop_tree): Reverse BB walk.
    (create_bb_allocnos): Likewise.
    * ira-lives.c (make_regno_born_and_dead, regs_set): Delete.
    (mark_reg_store): Rename to...
    (mark_ref_live): ...this and take a df_ref argument instead of
    note_stores arguments.  Assert that we have a register.
    (mark_reg_clobber): Delete.
    (def_conflicts_with_inputs_p): New function.
    (mark_reg_conflicts): Delete.
    (mark_reg_death): Rename to...
    (mark_ref_dead): ...this and take a df_ref argument instead of
    a register.  Assert that we have a register.
    (process_bb_node_lives): Hoist frequency calculation out of
    instruction walk.  Convert from a forwards scan to a backwards scan.
    Use DF_REF_USES and DF_REF_DEFS instead of register notes and
    note_stores.  Remove EH_RETURN_DATA_REGNO and regs_set handling.
    (create_allocno_live_ranges): Don't create regs_set.

I overlooked that when I was reviewing the patch.  My bad.
> Hence the attached patch, tested on SPARC/Solaris, OK for mainline?
>
Yes, Eric.  Thank you for the patch.
>
> 2008-11-10  Eric Botcazou  <ebotcazou@adacore.com>
>
> 	* ira-lives.c (process_bb_node_lives): Deal with EH_RETURN_DATA_REGNO.
> 	
>



More information about the Gcc-patches mailing list