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]

Followup reload patch (PR 36827)


This patch addresses the problems with my reload patch
<http://gcc.gnu.org/ml/gcc-patches/2008-07/msg00240.html> by disabling
the generation of address reloads from find_reloads_subreg_address
when find_reloads_address returns -1; that is, when
LEGITIMIZE_RELOAD_ADDRESS, as called by find_reloads_address, jumps to
the label win.  The problem cases for both SH and m32c involved
LEGITIMIZE_RELOAD_ADDRESS creating addresses that do not appear valid,
but also creating the necessary reloads for them.

Bootstrapped with no regressions on i686-pc-linux-gnu (trunk), and
confirmed in PR 36827 to work for SH and m32c.  OK to commit to trunk,
and to 4.3 branch subject to bootstrap with no regressions passing
there as well?

2008-07-18  Joseph Myers  <joseph@codesourcery.com>

	PR target/36780
	PR target/36827
	* reload.c (find_reloads_subreg_address): Only reload address if
	reloaded == 0, not for reloaded != 1.

	Revert:
	2008-07-16  Joseph Myers  <joseph@codesourcery.com>
	* config/m32c/m32c.c (BIG_FB_ADJ): Move definition earlier.
	(m32c_legitimate_address_p): Handle "++rii" addresses created by
	m32c_legitimize_reload_address.

	2008-07-15  Kaz Kojima  <kkojima@gcc.gnu.org>
	* config/sh/sh.h (GO_IF_LEGITIMATE_ADDRESS): Allow
	(plus (plus (reg) (const_int)) (const_int)) when reload_in_progress.

Index: reload.c
===================================================================
--- reload.c	(revision 137944)
+++ reload.c	(working copy)
@@ -6103,7 +6103,7 @@
 		 doesn't find any, then we may have just converted a
 		 valid address into an invalid one.  Check for that
 		 here.  */
-	      if (reloaded != 1
+	      if (reloaded == 0
 		  && !strict_memory_address_p (GET_MODE (tem),
 					       XEXP (tem, 0)))
 		push_reload (XEXP (tem, 0), NULL_RTX, &XEXP (tem, 0), (rtx*) 0,
Index: config/m32c/m32c.c
===================================================================
--- config/m32c/m32c.c	(revision 137944)
+++ config/m32c/m32c.c	(working copy)
@@ -1778,8 +1778,6 @@
 
 /* Addressing Modes */
 
-#define BIG_FB_ADJ 0
-
 /* Used by GO_IF_LEGITIMATE_ADDRESS.  The r8c/m32c family supports a
    wide range of non-orthogonal addressing modes, including the
    ability to double-indirect on *some* of them.  Not all insns
@@ -1897,17 +1895,6 @@
 	  return 0;
 	}
     }
-  if (RTX_IS ("++rii"))
-    {
-      rtx reg = patternr[2];
-      HOST_WIDE_INT offs = INTVAL (patternr[3]);
-
-      /* Avoid reloads for addresses generated by
-	 m32c_legitimize_reload_address being generated by
-	 find_reloads_subreg_address.  */
-      if (REGNO (reg) == FB_REGNO && offs == -BIG_FB_ADJ)
-	return 1;
-    }
   return 0;
 }
 
@@ -1955,6 +1942,8 @@
    frame, so the third case seems best.  Note that we subtract the
    zero, but detect that in the addhi3 pattern.  */
 
+#define BIG_FB_ADJ 0
+
 /* Implements LEGITIMIZE_ADDRESS.  The only address we really have to
    worry about is frame base offsets, as $fb has a limited
    displacement range.  We deal with this by attempting to reload $fb
Index: config/sh/sh.h
===================================================================
--- config/sh/sh.h	(revision 137944)
+++ config/sh/sh.h	(working copy)
@@ -2501,19 +2501,6 @@
 	    goto LABEL;							\
 	}								\
     }									\
-  /* FIXME: This is a temporary hack which should be removed.		\
-     When reload in progress, find_reloads_subreg_address tries to	\
-     make a new reload for some types of address.  Unfortunately it	\
-     generates wrong code on SH.  See PR36780.  The following is to	\
-     avoid this issue.  */						\
-  if (!TARGET_SHMEDIA && reload_in_progress				\
-      && GET_CODE (X) == PLUS						\
-      && (GET_MODE_SIZE (MODE) == 4 || GET_MODE_SIZE (MODE) == 8)	\
-      && GET_CODE (XEXP ((X), 0)) == PLUS				\
-      && GET_CODE (XEXP (XEXP ((X), 0), 1)) == CONST_INT		\
-      && BASE_REGISTER_RTX_P (XEXP (XEXP ((X), 0), 0))			\
-      && GET_CODE (XEXP ((X), 1)) == CONST_INT)				\
-    goto LABEL;								\
 }
 
 /* Try machine-dependent ways of modifying an illegitimate address

-- 
Joseph S. Myers
joseph@codesourcery.com


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