This is the mail archive of the
mailing list for the GCC project.
Re: RFA: patch fixing PR37948
- From: Jeff Law <law at redhat dot com>
- To: Vladimir Makarov <vmakarov at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, Kenneth Zadeck <Kenneth dot Zadeck at NaturalBridge dot com>
- Date: Mon, 10 Nov 2008 09:51:45 -0700
- Subject: Re: RFA: patch fixing PR37948
- References: <49185F85.firstname.lastname@example.org>
Vladimir Makarov wrote:
The following patch solves PR37948. The analysis of the problem can
be foundSo presumably after these changes your opinion is that extended
coalescing no longer generates worse code?
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 <email@example.com>
* 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
(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
(add_ira_allocno_to_bucket): Rename to add_allocno_to_bucket.
(add_ira_allocno_to_ordered_bucket): Rename to
(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
(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
(print_copy): Print copy origination too.
* ira-costs.c (scan_one_insn): Use alloc_pref for load from
Do we need both the extended coalescing and cost change (scan_one_insn)
to address the performance regression?
The patch is OK -- I'm just trying to make sure the interaction between
the two hunks is understood and recorded if there are future issues.