This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: patch for 37790


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
 
 
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]