public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6490] ira: Fix old-reload targets [PR103974]
@ 2022-01-11 19:25 Richard Sandiford
  0 siblings, 0 replies; only message in thread
From: Richard Sandiford @ 2022-01-11 19:25 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:db8d94a0570dc1f3de10c9eb9fe6e91df804272b

commit r12-6490-gdb8d94a0570dc1f3de10c9eb9fe6e91df804272b
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Tue Jan 11 19:24:59 2022 +0000

    ira: Fix old-reload targets [PR103974]
    
    The new IRA heuristics would need more work on old-reload targets,
    since flattening needs to be able to undo the cost propagation.
    It's doable, but hardly seems worth it.
    
    This patch therefore makes all the new calls to
    ira_subloop_allocnos_can_differ_p return false if !ira_use_lra_p.
    The color_pass code that predated the new function (and that was
    the source of ira_subloop_allocnos_can_differ_p) continues to
    behave as before.
    
    It's a hack, but at least it has the advantage that the new parameter
    would become obviously unused if reload and (!)ira_use_lra_p were
    removed.  The hack should therefore disappear alongside reload.
    
    gcc/
            PR rtl-optimization/103974
            * ira-int.h (ira_subloop_allocnos_can_differ_p): Take an
            extra argument, default true, that says whether old-reload
            targets should be excluded.
            * ira-color.c (color_pass): Pass false.

Diff:
---
 gcc/ira-color.c |  3 ++-
 gcc/ira-int.h   | 10 ++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/gcc/ira-color.c b/gcc/ira-color.c
index 36f3f4d70f3..59d978fe9b3 100644
--- a/gcc/ira-color.c
+++ b/gcc/ira-color.c
@@ -3664,7 +3664,8 @@ color_pass (ira_loop_tree_node_t loop_tree_node)
 	  ira_assert (bitmap_bit_p (subloop_node->all_allocnos,
 				    ALLOCNO_NUM (subloop_allocno)));
 	  if (ira_single_region_allocno_p (a, subloop_allocno)
-	      || !ira_subloop_allocnos_can_differ_p (a, hard_regno >= 0))
+	      || !ira_subloop_allocnos_can_differ_p (a, hard_regno >= 0,
+						     false))
 	    {
 	      gcc_assert (!ALLOCNO_MIGHT_CONFLICT_WITH_PARENT_P
 			  (subloop_allocno));
diff --git a/gcc/ira-int.h b/gcc/ira-int.h
index e1e68025211..e80fdeb0328 100644
--- a/gcc/ira-int.h
+++ b/gcc/ira-int.h
@@ -1607,10 +1607,16 @@ ira_loop_border_costs::move_between_loops_cost () const
 
 /* Return true if subloops that contain allocnos for A's register can
    use a different assignment from A.  ALLOCATED_P is true for the case
-   in which allocation succeeded for A.  */
+   in which allocation succeeded for A.  EXCLUDE_OLD_RELOAD is true if
+   we should always return false for non-LRA targets.  (This is a hack
+   and should be removed along with old reload.)  */
 inline bool
-ira_subloop_allocnos_can_differ_p (ira_allocno_t a, bool allocated_p = true)
+ira_subloop_allocnos_can_differ_p (ira_allocno_t a, bool allocated_p = true,
+				   bool exclude_old_reload = true)
 {
+  if (exclude_old_reload && !ira_use_lra_p)
+    return false;
+
   auto regno = ALLOCNO_REGNO (a);
 
   if (pic_offset_table_rtx != NULL


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-01-11 19:25 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-11 19:25 [gcc r12-6490] ira: Fix old-reload targets [PR103974] Richard Sandiford

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).