This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: RFA: patch for 37790
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Vladimir Makarov <vmakarov at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, Jeff Law <law at redhat dot com>, Kenneth Zadeck <Kenneth dot Zadeck at NaturalBridge dot com>
- Date: Tue, 18 Nov 2008 21:15:23 -0800
- Subject: Re: RFA: patch for 37790
- References: <49205031.5060903@redhat.com>
On Sun, Nov 16, 2008 at 11:54:09AM -0500, Vladimir Makarov wrote:
> The following patch solves PR37790. The problem is described on
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37790
>
> The patch switches stack slot coalescing from usage of bitmaps to usage
> of live ranges. It dramatically decreases compilation speed and memory
> usage for this test. The patch also prohibits stack slot sharing and
> processing pseudos spilled by IRA in reload pass when the register
> pressure is too high (more than 10K) to guarantee IRA decent behavior in
> extreme cases. The patch was successfully bootstrapped on x86/x86_64,
> ppc64, and itanium.
>
> Ok to submit?
>
> 2008-11-15 Vladimir Makarov <vmakarov@redhat.com>
>
> PR bootstrap/37790
> * ira-int.h (ira_copy_allocno_live_range_list,
> ira_merge_allocno_live_ranges,
> ira_allocno_live_ranges_intersect_p,
> ira_finish_allocno_live_range_list): New prototypes.
> (ira_allocno_live_ranges_intersect_p,
> ira_pseudo_live_ranges_intersect_p): Remove.
> * ira-conflicts.c (ira_allocno_live_ranges_intersect_p,
> ira_pseudo_live_ranges_intersect_p): Rename to
> allocnos_have_intersected_live_ranges_p and
> pseudos_have_intersected_live_ranges_p. Move them from here to
> ...
>
> * ira-color.c: ... here
> (coalesced_allocno_conflict_p): Use
> allocnos_have_intersected_live_ranges_p.
> (coalesced_allocnos_living_at_program_points,
> coalesced_allocnos_live_at_points_p,
> set_coalesced_allocnos_live_points): Remove.
> (slot_coalesced_allocnos_live_ranges,
> slot_coalesced_allocno_live_ranges_intersect_p,
> setup_slot_coalesced_allocno_live_ranges): New.
> (coalesce_spill_slots): Use ranges of coalesced allocnos.
> (ira_sort_regnos_for_alter_reg): Use
> allocnos_have_intersected_live_ranges_p.
> (ira_reuse_stack_slot): Use
> pseudos_have_intersected_live_ranges_p.
>
> * global.c (pseudo_for_reload_consideration_p): Check
> flag_ira_share_spill_slots too.
>
> * ira-build.c (copy_allocno_live_range_list): Rename to
> ira_copy_allocno_live_range_list. Make it external.
> (merge_ranges): Rename to ira_merge_allocno_live_ranges. Make it
> external.
> (ira_allocno_live_ranges_intersect_p): New.
> (ira_finish_allocno_live_range_list): New.
> (finish_allocno): Use it.
> (remove_unnecessary_allocnos): Use ira_merge_allocno_live_ranges.
> (copy_info_to_removed_store_destinations): Ditto. Use
> ira_copy_allocno_live_range_list.
> (ira_flattening): Use ira_merge_allocno_live_ranges.
> * ira.c (too_high_register_pressure_p): New function.
> (ira): Switch off sharing spill slots if the pressure is too high.
I need this patch on ira-merge branch. Otherwise, gcc may error
pseudos_have_intersected_live_ranges_p is defined, but used.
H.J.
----
2008-11-18 H.J. Lu <hongjiu.lu@intel.com>
* ira-color.c (pseudos_have_intersected_live_ranges_p): Define
only if ENABLE_IRA_CHECKING is defined.
Index: ira-color.c
===================================================================
--- ira-color.c (revision 141993)
+++ ira-color.c (working copy)
@@ -103,6 +103,7 @@ allocnos_have_intersected_live_ranges_p
ALLOCNO_LIVE_RANGES (a2));
}
+#ifdef ENABLE_IRA_CHECKING
/* Return TRUE if live ranges of pseudo-registers REGNO1 and REGNO2
intersect. This should be used when there is only one region.
Currently this is used during reload. */
@@ -120,6 +121,7 @@ pseudos_have_intersected_live_ranges_p (
return false;
return allocnos_have_intersected_live_ranges_p (a1, a2);
}
+#endif