diff mbox

PR54635: Add addr_space_t argument to mode_dependent_address_p

Message ID 505B06EC.7090709@gjlay.de
State New
Headers show

Commit Message

Georg-Johann Lay Sept. 20, 2012, 12:07 p.m. UTC
mode_dependent_address_p is not sensitive to the address space of the passed
address.  Thus, add an addr_space_t parameter to the hook.

Bootstapped without problems on x86-linux-gnu.

The patch is a no-op, it just adds the passing-around of the address space
information.

Ok to commit?

One more question:
This patch changes a target hook.  Is there a place in the internals
that gathers changes by naming *all* the changed/extended/removed/poisoned
interfaces?   So that developers can read the list of functions/macros/hooks
to learn if something interesting happened as they update the GCC sources?

Diff'ing the internals texi is tedious and too much noise as it would be
helpful to get a briefing.


Johann

	PR 54635
	* doc/tm.texi.in (TARGET_MODE_DEPENDENT_ADDRESS_P): Document new
	parameter addrspace.
	* doc/tm.texi: Regenerate.
	* target.def (mode_dependent_address_p): Add addr_space_t parameter.
	* targhooks.h (default_mode_dependent_address_p): Ditto.
	* targhooks.c (default_mode_dependent_address_p): Ditto.
	* expr.c (convert_move): Pass address space to mode_dependent_address_p.
	* combine.c (combine_simplify_rtx): Ditto.
	(make_extraction): Ditto.
	(simplify_shift_const_1): Ditto.
	(gen_lowpart_for_combine): Ditto.
	* lower-subreg.c (simple_move_operand): Ditto.
	* recog.c (simplify_while_replacing): Ditto.
	(offsettable_address_addr_space_p): Ditto.
	(mode_dependent_address_p): Ditto.
	* simplify-rtx.c (simplify_unary_operation_1): Ditto.
	(simplify_subreg): Ditto.
	* config/m68k/m68k.md: Ditto.
	* config/vax/vax.md: Ditto.
	* config/vax/constraints.md (Q): Ditto.
	* config/vax/predicates.md (indexed_memory_operand): Ditto.
	* config/alpha/alpha.c (alpha_mode_dependent_address_p): Add
	unused addr_space_t parameter.
	* config/avr/avr.c (avr_mode_dependent_address_p): Ditto.
	* config/h8300/h8300.c (h8300_mode_dependent_address_p): Ditto.
	* config/m32r/m32r.c (m32r_mode_dependent_address_p): Ditto.
	* config/rs6000/rs6000.c (rs6000_mode_dependent_address_p): Ditto.
	* config/rx/rx.c (rx_mode_dependent_address_p): Ditto.
	* config/sparc/sparc.c (sparc_mode_dependent_address_p): Ditto.
	* config/stormy16/stormy16.c (xstormy16_mode_dependent_address_p):
	Ditto.
	* config/vax/vax.c (vax_mode_dependent_address_p): Ditto.
	* config/xtensa/xtensa.c (xtensa_mode_dependent_address_p): Ditto.

Comments

Hans-Peter Nilsson Sept. 20, 2012, 1:50 p.m. UTC | #1
On Thu, 20 Sep 2012, Georg-Johann Lay wrote:
> mode_dependent_address_p is not sensitive to the address space of the passed
> address.  Thus, add an addr_space_t parameter to the hook.

Borderline obvious. :)  (J/k; the added functionality seems
obvious but the implementation may have non-obvious issues,
though I saw none.)

> One more question:
> This patch changes a target hook.  Is there a place in the internals
> that gathers changes by naming *all* the changed/extended/removed/poisoned
> interfaces?   So that developers can read the list of functions/macros/hooks
> to learn if something interesting happened as they update the GCC sources?

Someone once suggested an internal-changes web-page or file for
the benefit of out-of-tree ports and patches, but I don't know
what happened to that.  I'd look in the wiki.

> Diff'ing the internals texi is tedious and too much noise as it would be
> helpful to get a briefing.
>
>
> Johann
>
> 	PR 54635

Better spell that "PR other/54635" in the ChangeLog; if you
don't get the syntax right it won't automatically show up in
bugzilla.

> 	* doc/tm.texi.in (TARGET_MODE_DEPENDENT_ADDRESS_P): Document new
> 	parameter addrspace.
...


brgds, H-P
Georg-Johann Lay Sept. 20, 2012, 3:31 p.m. UTC | #2
Hans-Peter Nilsson wrote:
> Georg-Johann Lay wrote:
>> mode_dependent_address_p is not sensitive to the address space of the passed
>> address.  Thus, add an addr_space_t parameter to the hook.
> 
> Borderline obvious. :)  (J/k; the added functionality seems
> obvious but the implementation may have non-obvious issues,
> though I saw none.)

What specifically?

>> One more question:
>> This patch changes a target hook.  Is there a place in the internals
>> that gathers changes by naming *all* the changed/extended/removed/poisoned
>> interfaces?   So that developers can read the list of functions/macros/hooks
>> to learn if something interesting happened as they update the GCC sources?
> 
> Someone once suggested an internal-changes web-page or file for
> the benefit of out-of-tree ports and patches, but I don't know
> what happened to that.  I'd look in the wiki.
> 
>> Diff'ing the internals texi is tedious and too much noise as it would be
>> helpful to get a briefing.
>>
>>
>> Johann
>>
>> 	PR 54635
> 
> Better spell that "PR other/54635" in the ChangeLog; if you
> don't get the syntax right it won't automatically show up in
> bugzilla.

Okay with that change to the ChangeLog?

Being unsure about the component, I chose "other".
Is "middle-end" better?

AFAIK "PR12345", "PR 12345" and "PR component/12345" entries are recognized
and connected to bugzilla PRs?

Johann
Hans-Peter Nilsson Sept. 20, 2012, 11 p.m. UTC | #3
On Thu, 20 Sep 2012, Georg-Johann Lay wrote:
> Hans-Peter Nilsson wrote:
> > Georg-Johann Lay wrote:
> >> mode_dependent_address_p is not sensitive to the address space of the passed
> >> address.  Thus, add an addr_space_t parameter to the hook.
> >
> > Borderline obvious. :)  (J/k; the added functionality seems
> > obvious but the implementation may have non-obvious issues,
> > though I saw none.)
>
> What specifically?

Specifically "none"; nothing.  (Not a typo for "one". :)

> Being unsure about the component, I chose "other".
> Is "middle-end" better?

Since this is the back-end API, i think your "other" fits just
as good or better.  Just IMHO.

> AFAIK "PR12345", "PR 12345" and "PR component/12345" entries are recognized
> and connected to bugzilla PRs?

If you're sure it gets through to bugzilla, then I certainly
don't care.

brgds, H-P
diff mbox

Patch

Index: doc/tm.texi
===================================================================
--- doc/tm.texi	(revision 191490)
+++ doc/tm.texi	(working copy)
@@ -5611,8 +5611,9 @@  It is not necessary for this macro to co
 address;  but often a machine-dependent strategy can generate better code.
 @end defmac
 
-@deftypefn {Target Hook} bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx @var{addr})
-This hook returns @code{true} if memory address @var{addr} can have
+@deftypefn {Target Hook} bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx @var{addr}, addr_space_t @var{addrspace})
+This hook returns @code{true} if memory address @var{addr} in address
+space @var{addrspace} can have
 different meanings depending on the machine mode of the memory
 reference it is used for or if the address is valid for some modes
 but not others.
Index: doc/tm.texi.in
===================================================================
--- doc/tm.texi.in	(revision 191490)
+++ doc/tm.texi.in	(working copy)
@@ -5536,7 +5536,8 @@  address;  but often a machine-dependent
 @end defmac
 
 @hook TARGET_MODE_DEPENDENT_ADDRESS_P
-This hook returns @code{true} if memory address @var{addr} can have
+This hook returns @code{true} if memory address @var{addr} in address
+space @var{addrspace} can have
 different meanings depending on the machine mode of the memory
 reference it is used for or if the address is valid for some modes
 but not others.
Index: target.def
===================================================================
--- target.def	(revision 191490)
+++ target.def	(working copy)
@@ -1413,7 +1413,7 @@  DEFHOOK
 DEFHOOK
 (mode_dependent_address_p,
  "",
- bool, (const_rtx addr),
+ bool, (const_rtx addr, addr_space_t addrspace),
  default_mode_dependent_address_p)
 
 /* Given an invalid address X for a given machine mode, try machine-specific
Index: recog.h
===================================================================
--- recog.h	(revision 191490)
+++ recog.h	(working copy)
@@ -114,7 +114,7 @@  extern int offsettable_address_addr_spac
 #define offsettable_address_p(strict,mode,addr) \
 	offsettable_address_addr_space_p ((strict), (mode), (addr), \
 					  ADDR_SPACE_GENERIC)
-extern bool mode_dependent_address_p (rtx);
+extern bool mode_dependent_address_p (rtx, addr_space_t);
 
 extern int recog (rtx, rtx, int *);
 #ifndef GENERATOR_FILE
Index: targhooks.h
===================================================================
--- targhooks.h	(revision 191490)
+++ targhooks.h	(working copy)
@@ -142,7 +142,7 @@  extern tree default_mangle_decl_assemble
 extern tree default_emutls_var_fields (tree, tree *);
 extern tree default_emutls_var_init (tree, tree, tree);
 extern bool default_hard_regno_scratch_ok (unsigned int);
-extern bool default_mode_dependent_address_p (const_rtx addr);
+extern bool default_mode_dependent_address_p (const_rtx, addr_space_t);
 extern bool default_target_option_valid_attribute_p (tree, tree, tree, int);
 extern bool default_target_option_pragma_parse (tree, tree);
 extern bool default_target_can_inline_p (tree, tree);
Index: combine.c
===================================================================
--- combine.c	(revision 191490)
+++ combine.c	(working copy)
@@ -5424,7 +5424,8 @@  combine_simplify_rtx (rtx x, enum machin
 	 of the address.  */
       if (MEM_P (SUBREG_REG (x))
 	  && (MEM_VOLATILE_P (SUBREG_REG (x))
-	      || mode_dependent_address_p (XEXP (SUBREG_REG (x), 0))))
+	      || mode_dependent_address_p (XEXP (SUBREG_REG (x), 0),
+					   MEM_ADDR_SPACE (SUBREG_REG (x)))))
 	return gen_rtx_CLOBBER (mode, const0_rtx);
 
       /* Note that we cannot do any narrowing for non-constants since
@@ -7054,7 +7055,8 @@  make_extraction (enum machine_mode mode,
 		 may not be aligned, for one thing).  */
 	      && GET_MODE_PRECISION (inner_mode) >= GET_MODE_PRECISION (tmode)
 	      && (inner_mode == tmode
-		  || (! mode_dependent_address_p (XEXP (inner, 0))
+		  || (! mode_dependent_address_p (XEXP (inner, 0),
+						  MEM_ADDR_SPACE (inner))
 		      && ! MEM_VOLATILE_P (inner))))))
     {
       /* If INNER is a MEM, make a new MEM that encompasses just the desired
@@ -7233,7 +7235,7 @@  make_extraction (enum machine_mode mode,
       /* If we have to change the mode of memory and cannot, the desired mode
 	 is EXTRACTION_MODE.  */
       if (inner_mode != wanted_inner_mode
-	  && (mode_dependent_address_p (XEXP (inner, 0))
+	  && (mode_dependent_address_p (XEXP (inner, 0), MEM_ADDR_SPACE (inner))
 	      || MEM_VOLATILE_P (inner)
 	      || pos_rtx))
 	wanted_inner_mode = extraction_mode;
@@ -7271,7 +7273,7 @@  make_extraction (enum machine_mode mode,
       && ! pos_rtx
       && GET_MODE_SIZE (wanted_inner_mode) < GET_MODE_SIZE (is_mode)
       && MEM_P (inner)
-      && ! mode_dependent_address_p (XEXP (inner, 0))
+      && ! mode_dependent_address_p (XEXP (inner, 0), MEM_ADDR_SPACE (inner))
       && ! MEM_VOLATILE_P (inner))
     {
       int offset = 0;
@@ -9883,7 +9885,8 @@  simplify_shift_const_1 (enum rtx_code co
 	     minus the width of a smaller mode, we can do this with a
 	     SIGN_EXTEND or ZERO_EXTEND from the narrower memory location.  */
 	  if ((code == ASHIFTRT || code == LSHIFTRT)
-	      && ! mode_dependent_address_p (XEXP (varop, 0))
+	      && ! mode_dependent_address_p (XEXP (varop, 0),
+					     MEM_ADDR_SPACE (varop))
 	      && ! MEM_VOLATILE_P (varop)
 	      && (tmode = mode_for_size (GET_MODE_BITSIZE (mode) - count,
 					 MODE_INT, 1)) != BLKmode)
@@ -10702,7 +10705,8 @@  gen_lowpart_for_combine (enum machine_mo
 
       /* Refuse to work on a volatile memory ref or one with a mode-dependent
 	 address.  */
-      if (MEM_VOLATILE_P (x) || mode_dependent_address_p (XEXP (x, 0)))
+      if (MEM_VOLATILE_P (x)
+	  || mode_dependent_address_p (XEXP (x, 0), MEM_ADDR_SPACE (x)))
 	goto fail;
 
       /* If we want to refer to something bigger than the original memref,
Index: expr.c
===================================================================
--- expr.c	(revision 191490)
+++ expr.c	(working copy)
@@ -573,7 +573,8 @@  convert_move (rtx to, rtx from, int unsi
       if (!((MEM_P (from)
 	     && ! MEM_VOLATILE_P (from)
 	     && direct_load[(int) to_mode]
-	     && ! mode_dependent_address_p (XEXP (from, 0)))
+	     && ! mode_dependent_address_p (XEXP (from, 0),
+					    MEM_ADDR_SPACE (from)))
 	    || REG_P (from)
 	    || GET_CODE (from) == SUBREG))
 	from = force_reg (from_mode, from);
@@ -591,7 +592,8 @@  convert_move (rtx to, rtx from, int unsi
       if (!((MEM_P (from)
 	     && ! MEM_VOLATILE_P (from)
 	     && direct_load[(int) to_mode]
-	     && ! mode_dependent_address_p (XEXP (from, 0)))
+	     && ! mode_dependent_address_p (XEXP (from, 0),
+					    MEM_ADDR_SPACE (from)))
 	    || REG_P (from)
 	    || GET_CODE (from) == SUBREG))
 	from = force_reg (from_mode, from);
Index: lower-subreg.c
===================================================================
--- lower-subreg.c	(revision 191490)
+++ lower-subreg.c	(working copy)
@@ -299,7 +299,7 @@  simple_move_operand (rtx x)
 
   if (MEM_P (x)
       && (MEM_VOLATILE_P (x)
-	  || mode_dependent_address_p (XEXP (x, 0))))
+	  || mode_dependent_address_p (XEXP (x, 0), MEM_ADDR_SPACE (x))))
     return false;
 
   return true;
Index: recog.c
===================================================================
--- recog.c	(revision 191490)
+++ recog.c	(working copy)
@@ -629,7 +629,8 @@  simplify_while_replacing (rtx *loc, rtx
       if (MEM_P (XEXP (x, 0))
 	  && CONST_INT_P (XEXP (x, 1))
 	  && CONST_INT_P (XEXP (x, 2))
-	  && !mode_dependent_address_p (XEXP (XEXP (x, 0), 0))
+	  && !mode_dependent_address_p (XEXP (XEXP (x, 0), 0),
+					MEM_ADDR_SPACE (XEXP (x, 0)))
 	  && !MEM_VOLATILE_P (XEXP (x, 0)))
 	{
 	  enum machine_mode wanted_mode = VOIDmode;
@@ -1945,7 +1946,7 @@  offsettable_address_addr_space_p (int st
   /* Adjusting an offsettable address involves changing to a narrower mode.
      Make sure that's OK.  */
 
-  if (mode_dependent_address_p (y))
+  if (mode_dependent_address_p (y, as))
     return 0;
 
   /* ??? How much offset does an offsettable BLKmode reference need?
@@ -1998,11 +1999,13 @@  offsettable_address_addr_space_p (int st
 /* Return 1 if ADDR is an address-expression whose effect depends
    on the mode of the memory reference it is used in.
 
+   ADDRSPACE is the address space associated with the address.
+
    Autoincrement addressing is a typical example of mode-dependence
    because the amount of the increment depends on the mode.  */
 
 bool
-mode_dependent_address_p (rtx addr)
+mode_dependent_address_p (rtx addr, addr_space_t addrspace)
 {
   /* Auto-increment addressing with anything other than post_modify
      or pre_modify always introduces a mode dependency.  Catch such
@@ -2013,7 +2016,7 @@  mode_dependent_address_p (rtx addr)
       || GET_CODE (addr) == POST_DEC)
     return true;
 
-  return targetm.mode_dependent_address_p (addr);
+  return targetm.mode_dependent_address_p (addr, addrspace);
 }
 
 /* Like extract_insn, but save insn extracted and don't extract again, when
Index: simplify-rtx.c
===================================================================
--- simplify-rtx.c	(revision 191490)
+++ simplify-rtx.c	(working copy)
@@ -874,7 +874,7 @@  simplify_unary_operation_1 (enum rtx_cod
 	 if we are not changing the meaning of the address. */
       if (GET_CODE (op) == MEM
 	  && !MEM_VOLATILE_P (op)
-	  && !mode_dependent_address_p (XEXP (op, 0)))
+	  && !mode_dependent_address_p (XEXP (op, 0), MEM_ADDR_SPACE (op)))
 	return rtl_hooks.gen_lowpart_no_emit (mode, op);
 
       break;
@@ -5611,7 +5611,7 @@  simplify_subreg (enum machine_mode outer
      or if we would be widening it.  */
 
   if (MEM_P (op)
-      && ! mode_dependent_address_p (XEXP (op, 0))
+      && ! mode_dependent_address_p (XEXP (op, 0), MEM_ADDR_SPACE (op))
       /* Allow splitting of volatile memory references in case we don't
          have instruction to move the whole thing.  */
       && (! MEM_VOLATILE_P (op)
@@ -5769,7 +5769,8 @@  simplify_subreg (enum machine_mode outer
       && (INTVAL (XEXP (op, 1)) % GET_MODE_BITSIZE (outermode)) == 0
       && INTVAL (XEXP (op, 1)) > 0
       && INTVAL (XEXP (op, 1)) < GET_MODE_BITSIZE (innermode)
-      && ! mode_dependent_address_p (XEXP (XEXP (op, 0), 0))
+      && ! mode_dependent_address_p (XEXP (XEXP (op, 0), 0),
+				     MEM_ADDR_SPACE (XEXP (op, 0)))
       && ! MEM_VOLATILE_P (XEXP (op, 0))
       && byte == subreg_lowpart_offset (outermode, innermode)
       && (GET_MODE_SIZE (outermode) >= UNITS_PER_WORD
Index: targhooks.c
===================================================================
--- targhooks.c	(revision 191490)
+++ targhooks.c	(working copy)
@@ -1202,7 +1202,8 @@  default_hard_regno_scratch_ok (unsigned
 /* The default implementation of TARGET_MODE_DEPENDENT_ADDRESS_P.  */
 
 bool
-default_mode_dependent_address_p (const_rtx addr ATTRIBUTE_UNUSED)
+default_mode_dependent_address_p (const_rtx addr ATTRIBUTE_UNUSED,
+				  addr_space_t addrspace ATTRIBUTE_UNUSED)
 {
   return false;
 }
Index: config/alpha/alpha.c
===================================================================
--- config/alpha/alpha.c	(revision 191490)
+++ config/alpha/alpha.c	(working copy)
@@ -1043,7 +1043,8 @@  alpha_legitimize_address (rtx x, rtx old
    We can simplify the test since we know that the address must be valid.  */
 
 static bool
-alpha_mode_dependent_address_p (const_rtx addr)
+alpha_mode_dependent_address_p (const_rtx addr,
+				addr_space_t as ATTRIBUTE_UNUSED)
 {
   return GET_CODE (addr) == AND;
 }
Index: config/sparc/sparc.c
===================================================================
--- config/sparc/sparc.c	(revision 191490)
+++ config/sparc/sparc.c	(working copy)
@@ -567,7 +567,7 @@  static rtx sparc_legitimize_tls_address
 static rtx sparc_legitimize_pic_address (rtx, rtx);
 static rtx sparc_legitimize_address (rtx, rtx, enum machine_mode);
 static rtx sparc_delegitimize_address (rtx);
-static bool sparc_mode_dependent_address_p (const_rtx);
+static bool sparc_mode_dependent_address_p (const_rtx, addr_space_t);
 static bool sparc_pass_by_reference (cumulative_args_t,
 				     enum machine_mode, const_tree, bool);
 static void sparc_function_arg_advance (cumulative_args_t,
@@ -4045,7 +4045,8 @@  sparc_legitimize_reload_address (rtx x,
 
 
 static bool
-sparc_mode_dependent_address_p (const_rtx addr)
+sparc_mode_dependent_address_p (const_rtx addr,
+				addr_space_t as ATTRIBUTE_UNUSED)
 {
   if (flag_pic && GET_CODE (addr) == PLUS)
     {
Index: config/m32r/m32r.c
===================================================================
--- config/m32r/m32r.c	(revision 191490)
+++ config/m32r/m32r.c	(working copy)
@@ -62,7 +62,7 @@  static void  block_move_call (rtx, rtx,
 static int   m32r_is_insn (rtx);
 static bool  m32r_legitimate_address_p (enum machine_mode, rtx, bool);
 static rtx   m32r_legitimize_address (rtx, rtx, enum machine_mode);
-static bool  m32r_mode_dependent_address_p (const_rtx);
+static bool  m32r_mode_dependent_address_p (const_rtx, addr_space_t);
 static tree  m32r_handle_model_attribute (tree *, tree, tree, int, bool *);
 static void  m32r_print_operand (FILE *, rtx, int);
 static void  m32r_print_operand_address (FILE *, rtx);
@@ -2011,7 +2011,7 @@  m32r_legitimize_address (rtx x, rtx orig
 /* Worker function for TARGET_MODE_DEPENDENT_ADDRESS_P.  */
 
 static bool
-m32r_mode_dependent_address_p (const_rtx addr)
+m32r_mode_dependent_address_p (const_rtx addr, addr_space_t as ATTRIBUTE_UNUSED)
 {
   if (GET_CODE (addr) == LO_SUM)
     return true;
Index: config/rx/rx.c
===================================================================
--- config/rx/rx.c	(revision 191490)
+++ config/rx/rx.c	(working copy)
@@ -318,7 +318,7 @@  rx_is_restricted_memory_address (rtx mem
 /* Implement TARGET_MODE_DEPENDENT_ADDRESS_P.  */
 
 static bool
-rx_mode_dependent_address_p (const_rtx addr)
+rx_mode_dependent_address_p (const_rtx addr, addr_space_t as ATTRIBUTE_UNUSED)
 {
   if (GET_CODE (addr) == CONST)
     addr = XEXP (addr, 0);
Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c	(revision 191490)
+++ config/avr/avr.c	(working copy)
@@ -1632,7 +1632,7 @@  avr_cannot_modify_jumps_p (void)
       with mov<mode> expanders in avr.md.  */
 
 static bool
-avr_mode_dependent_address_p (const_rtx addr)
+avr_mode_dependent_address_p (const_rtx addr, addr_space_t as ATTRIBUTE_UNUSED)
 {
   return GET_MODE (addr) != Pmode;
 }
Index: config/xtensa/xtensa.c
===================================================================
--- config/xtensa/xtensa.c	(revision 191490)
+++ config/xtensa/xtensa.c	(working copy)
@@ -126,7 +126,7 @@  static rtx fixup_subreg_mem (rtx);
 static struct machine_function * xtensa_init_machine_status (void);
 static rtx xtensa_legitimize_tls_address (rtx);
 static rtx xtensa_legitimize_address (rtx, rtx, enum machine_mode);
-static bool xtensa_mode_dependent_address_p (const_rtx);
+static bool xtensa_mode_dependent_address_p (const_rtx, addr_space_t);
 static bool xtensa_return_in_msb (const_tree);
 static void printx (FILE *, signed int);
 static void xtensa_function_epilogue (FILE *, HOST_WIDE_INT);
@@ -1961,7 +1961,8 @@  xtensa_legitimize_address (rtx x,
    by default.  */
 
 static bool
-xtensa_mode_dependent_address_p (const_rtx addr)
+xtensa_mode_dependent_address_p (const_rtx addr,
+				 addr_space_t as ATTRIBUTE_UNUSED)
 {
   return constantpool_address_p (addr);
 }
Index: config/stormy16/stormy16.c
===================================================================
--- config/stormy16/stormy16.c	(revision 191490)
+++ config/stormy16/stormy16.c	(working copy)
@@ -671,7 +671,8 @@  xstormy16_legitimate_address_p (enum mac
    or pre-decrement address.  */
 
 static bool
-xstormy16_mode_dependent_address_p (const_rtx x)
+xstormy16_mode_dependent_address_p (const_rtx x,
+				    addr_space_t as ATTRIBUTE_UNUSED)
 {
   if (LEGITIMATE_ADDRESS_CONST_INT_P (x, 0)
       && ! LEGITIMATE_ADDRESS_CONST_INT_P (x, 6))
Index: config/m68k/m68k.md
===================================================================
--- config/m68k/m68k.md	(revision 191490)
+++ config/m68k/m68k.md	(working copy)
@@ -5610,7 +5610,8 @@  (define_insn ""
 	(match_operand:SI 2 "general_src_operand" "rmSi"))]
   "TARGET_68020 && TARGET_BITFIELD
    && (INTVAL (operands[1]) % 8) == 0
-   && ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   && ! mode_dependent_address_p (XEXP (operands[0], 0),
+                                  MEM_ADDR_SPACE (operands[0]))"
 {
   operands[0]
     = adjust_address (operands[0], SImode, INTVAL (operands[1]) / 8);
@@ -5627,7 +5628,8 @@  (define_insn ""
    && (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
    && INTVAL (operands[2]) % INTVAL (operands[1]) == 0
    && (GET_CODE (operands[0]) == REG
-       || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
+       || ! mode_dependent_address_p (XEXP (operands[0], 0),
+                                      MEM_ADDR_SPACE (operands[0])))"
 {
   if (REG_P (operands[0]))
     {
@@ -5664,7 +5666,8 @@  (define_insn ""
 			 (match_operand:SI 2 "const_int_operand" "n")))]
   "TARGET_68020 && TARGET_BITFIELD
    && (INTVAL (operands[2]) % 8) == 0
-   && ! mode_dependent_address_p (XEXP (operands[1], 0))"
+   && ! mode_dependent_address_p (XEXP (operands[1], 0),
+                                  MEM_ADDR_SPACE (operands[1]))"
 {
   operands[1]
     = adjust_address (operands[1], SImode, INTVAL (operands[2]) / 8);
@@ -5681,7 +5684,8 @@  (define_insn ""
    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
    && (GET_CODE (operands[1]) == REG
-       || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
+       || ! mode_dependent_address_p (XEXP (operands[1], 0),
+                                      MEM_ADDR_SPACE (operands[1])))"
 {
   cc_status.flags |= CC_NOT_NEGATIVE;
   if (REG_P (operands[1]))
@@ -5718,7 +5722,8 @@  (define_insn ""
 			 (match_operand:SI 2 "const_int_operand" "n")))]
   "TARGET_68020 && TARGET_BITFIELD
    && (INTVAL (operands[2]) % 8) == 0
-   && ! mode_dependent_address_p (XEXP (operands[1], 0))"
+   && ! mode_dependent_address_p (XEXP (operands[1], 0),
+                                  MEM_ADDR_SPACE (operands[1]))"
 {
   operands[1]
     = adjust_address (operands[1], SImode, INTVAL (operands[2]) / 8);
@@ -5735,7 +5740,8 @@  (define_insn ""
    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
    && (GET_CODE (operands[1]) == REG
-       || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
+       || ! mode_dependent_address_p (XEXP (operands[1], 0),
+                                      MEM_ADDR_SPACE (operands[1])))"
 {
   if (REG_P (operands[1]))
     {
Index: config/rs6000/rs6000.c
===================================================================
--- config/rs6000/rs6000.c	(revision 191490)
+++ config/rs6000/rs6000.c	(working copy)
@@ -6463,7 +6463,8 @@  rs6000_debug_legitimate_address_p (enum
 /* Implement TARGET_MODE_DEPENDENT_ADDRESS_P.  */
 
 static bool
-rs6000_mode_dependent_address_p (const_rtx addr)
+rs6000_mode_dependent_address_p (const_rtx addr,
+				 addr_space_t as ATTRIBUTE_UNUSED)
 {
   return rs6000_mode_dependent_address_ptr (addr);
 }
Index: config/vax/vax.c
===================================================================
--- config/vax/vax.c	(revision 191490)
+++ config/vax/vax.c	(working copy)
@@ -64,7 +64,7 @@  static rtx vax_builtin_setjmp_frame_valu
 static void vax_asm_trampoline_template (FILE *);
 static void vax_trampoline_init (rtx, tree, rtx);
 static int vax_return_pops_args (tree, tree, int);
-static bool vax_mode_dependent_address_p (const_rtx);
+static bool vax_mode_dependent_address_p (const_rtx, addr_space_t);
 
 /* Initialize the GCC target structure.  */
 #undef TARGET_ASM_ALIGNED_HI_OP
@@ -1839,7 +1839,7 @@  vax_legitimate_address_p (enum machine_m
    thus (because the index scale factor is the length of the operand).  */
 
 static bool
-vax_mode_dependent_address_p (const_rtx x)
+vax_mode_dependent_address_p (const_rtx x, addr_space_t as ATTRIBUTE_UNUSED)
 {
   rtx xfoo0, xfoo1;
 
Index: config/vax/predicates.md
===================================================================
--- config/vax/predicates.md	(revision 191490)
+++ config/vax/predicates.md	(working copy)
@@ -79,9 +79,9 @@  (define_predicate "indirect_memory_opera
 (define_predicate "indexed_memory_operand"
    (match_code "mem")
 {
-  op = XEXP (op, 0);
-  return GET_CODE (op) != PRE_DEC && GET_CODE (op) != POST_INC
-	 && mode_dependent_address_p (op);
+  rtx addr = XEXP (op, 0);
+  return GET_CODE (addr) != PRE_DEC && GET_CODE (addr) != POST_INC
+	 && mode_dependent_address_p (addr, MEM_ADDR_SPACE (op));
 })
 
 (define_predicate "illegal_blk_memory_operand"
Index: config/vax/vax.md
===================================================================
--- config/vax/vax.md	(revision 191490)
+++ config/vax/vax.md	(working copy)
@@ -782,7 +782,8 @@  (define_insn ""
    "(INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
    && INTVAL (operands[2]) % INTVAL (operands[1]) == 0
    && (REG_P (operands[0])
-       || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
+       || ! mode_dependent_address_p (XEXP (operands[0], 0),
+				       MEM_ADDR_SPACE (operands[0])))"
   "*
 {
   if (REG_P (operands[0]))
@@ -810,7 +811,8 @@  (define_insn ""
   "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
    && (REG_P (operands[1])
-       || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
+       || ! mode_dependent_address_p (XEXP (operands[1], 0),
+				      MEM_ADDR_SPACE (operands[1])))"
   "*
 {
   if (REG_P (operands[1]))
@@ -837,7 +839,8 @@  (define_insn ""
   "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
    && (REG_P (operands[1])
-       || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
+       || ! mode_dependent_address_p (XEXP (operands[1], 0),
+				      MEM_ADDR_SPACE (operands[1])))"
   "*
 {
   if (REG_P (operands[1]))
@@ -960,7 +963,8 @@  (define_insn "extv"
       || INTVAL (operands[2]) + INTVAL (operands[3]) > 32
       || side_effects_p (operands[1])
       || (MEM_P (operands[1])
-	  && mode_dependent_address_p (XEXP (operands[1], 0))))
+	  && mode_dependent_address_p (XEXP (operands[1], 0),
+				       MEM_ADDR_SPACE (operands[1]))))
     return \"extv %3,%2,%1,%0\";
   if (INTVAL (operands[2]) == 8)
     return \"rotl %R3,%1,%0\;cvtbl %0,%0\";
@@ -988,7 +992,8 @@  (define_insn ""
       || INTVAL (operands[2]) + INTVAL (operands[3]) > 32
       || side_effects_p (operands[1])
       || (MEM_P (operands[1])
-	  && mode_dependent_address_p (XEXP (operands[1], 0))))
+	  && mode_dependent_address_p (XEXP (operands[1], 0),
+				       MEM_ADDR_SPACE (operands[1]))))
     return \"extzv %3,%2,%1,%0\";
   if (INTVAL (operands[2]) == 8)
     return \"rotl %R3,%1,%0\;movzbl %0,%0\";
Index: config/vax/constraints.md
===================================================================
--- config/vax/constraints.md	(revision 191490)
+++ config/vax/constraints.md	(working copy)
@@ -99,7 +99,8 @@  (define_constraint "G"
 (define_memory_constraint "Q"
    "operand is a MEM that does not have a mode-dependent address."
    (and (match_code "mem")
-	(match_test "!mode_dependent_address_p (XEXP (op, 0))")))
+	(match_test "!mode_dependent_address_p (XEXP (op, 0),
+					        MEM_ADDR_SPACE (op))")))
 
 (define_memory_constraint "B"
     ""
Index: config/h8300/h8300.c
===================================================================
--- config/h8300/h8300.c	(revision 191490)
+++ config/h8300/h8300.c	(working copy)
@@ -2166,7 +2166,8 @@  h8300_get_index (rtx x, enum machine_mod
    (the amount of decrement or increment being the length of the operand).  */
 
 static bool
-h8300_mode_dependent_address_p (const_rtx addr)
+h8300_mode_dependent_address_p (const_rtx addr,
+				addr_space_t as ATTRIBUTE_UNUSED)
 {
   if (GET_CODE (addr) == PLUS
       && h8300_get_index (XEXP (addr, 0), VOIDmode, 0) != XEXP (addr, 0))