RFA: patch fixing PR37948

Vladimir Makarov vmakarov@redhat.com
Mon Nov 10 16:32:00 GMT 2008


  The following patch solves PR37948.  The analysis of the problem can 
be found

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37948

The patch also switches on extended coalescing in IRA which can be used 
also for solving the problem.

I found some pitfalls in coalescing code (usage of allocnos itself 
instead of head of coalescing allocnos list) and fixed that.

The patch was successfully bootstrapped and tested on x86/x86_64.

2008-11-07  Vladimir Makarov  <vmakarov@redhat.com>
       
    PR rtl-optimizations/37948
    * ira-int.h (struct ira_allocno_copy): New member constraint_p.
    (ira_create_copy, ira_add_allocno_copy): New parameter.

    * ira-conflicts.c (process_regs_for_copy): New parameter.  Pass it
    to ira_add_allocno_copy.
    (process_reg_shuffles, add_insn_allocno_copies): Pass a new
    parameter to process_regs_for_copy.
    (propagate_copies): Pass a new parameter to ira_add_allocno_copy.
    Fix typo in passing second allocno to ira_add_allocno_copy.

    * ira-color.c (update_conflict_hard_regno_costs): Use head of
    coalesced allocnos list.
    (assign_hard_reg): Ditto.  Check that assigned allocnos are not in
    the graph.
    (add_ira_allocno_to_bucket): Rename to add_allocno_to_bucket.
    (add_ira_allocno_to_ordered_bucket): Rename to
    add_allocno_to_ordered_bucket.
    (push_ira_allocno_to_stack): Rename to push_allocno_to_stack.  Use
    head of coalesced allocnos list.
    (push_allocnos_to_stack): Remove calculation of ALLOCNO_TEMP.
    Check that it is aready calculated.
    (push_ira_allocno_to_spill): Rename to push_ira_allocno_to_spill.
    (setup_allocno_left_conflicts_num): Use head of coalesced allocnos
    list.
    (coalesce_allocnos): Do extended coalescing too.

    * ira-emit.c (add_range_and_copies_from_move_list): Pass a new
    parameter to ira_add_allocno_copy.

    * ira-build.c (ira_create_copy, ira_add_allocno_copy): Add a new
    parameter.
    (print_copy): Print copy origination too.

    * ira-costs.c (scan_one_insn): Use alloc_pref for load from
    equivalent memory.
   

-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr37948.patch
Type: text/x-patch
Size: 19678 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20081110/a7e767c4/attachment.bin>


More information about the Gcc-patches mailing list