public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/ARM/heads/morello)] Add get_address_mode
@ 2022-03-16 12:16 Richard Sandiford
  0 siblings, 0 replies; only message in thread
From: Richard Sandiford @ 2022-03-16 12:16 UTC (permalink / raw)
  To: gcc-cvs

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

commit fa88b914595072a853672744abf2fc1715def42c
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Wed Mar 16 12:15:47 2022 +0000

    Add get_address_mode
    
    This patch splits out the mode handling of mem_address_mode
    into a new function, get_address_mode, and uses it in a couple
    of places.

Diff:
---
 gcc/recog.c   |  4 +---
 gcc/reload.c  |  4 +---
 gcc/rtl.h     |  3 ++-
 gcc/rtlanal.c | 20 +++++++++++++-------
 4 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/gcc/recog.c b/gcc/recog.c
index de719d8996b..8496e608d31 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -1946,9 +1946,7 @@ offsettable_address_addr_space_p (int strictp, machine_mode mode, rtx y,
   if (mode_dependent_address_p (y, as))
     return 0;
 
-  machine_mode address_mode = GET_MODE (y);
-  if (address_mode == VOIDmode)
-    address_mode = targetm.addr_space.address_mode (as);
+  auto address_mode = get_address_mode (y, as);
 #ifdef POINTERS_EXTEND_UNSIGNED
   machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
 #endif
diff --git a/gcc/reload.c b/gcc/reload.c
index 8fcb3ac2784..01adc539ffb 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -5223,9 +5223,7 @@ find_reloads_address (machine_mode mode, rtx *memrefloc, rtx ad,
      into a register.  */
   if (CONSTANT_P (ad) && ! strict_memory_address_addr_space_p (mode, ad, as))
     {
-      machine_mode address_mode = GET_MODE (ad);
-      if (address_mode == VOIDmode)
-	address_mode = targetm.addr_space.address_mode (as);
+      machine_mode address_mode = get_address_mode (ad, as);
 
       /* If AD is an address in the constant pool, the MEM rtx may be shared.
 	 Unshare it so we can safely alter it.  */
diff --git a/gcc/rtl.h b/gcc/rtl.h
index cd33abbc55b..d83a34752ed 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -3559,7 +3559,8 @@ inline bool any_plus_p (const_rtx x)
   return GET_CODE (x) == PLUS || GET_CODE (x) == POINTER_PLUS;
 }
 
-extern scalar_addr_mode mem_address_mode (rtx mem);
+extern scalar_addr_mode mem_address_mode (const_rtx);
+extern scalar_addr_mode get_address_mode (const_rtx, addr_space_t);
 extern int rtx_addr_can_trap_p (const_rtx);
 extern bool nonzero_address_p (const_rtx);
 extern int rtx_unstable_p (const_rtx);
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index d000a603b3c..19a818b1bc3 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -5962,18 +5962,24 @@ low_bitmask_len (machine_mode mode, unsigned HOST_WIDE_INT m)
   return exact_log2 (m + 1);
 }
 
-/* Return the mode of MEM's address.  */
+/* Return the mode of ADDR, which is an address in address space AS.  */
 
 scalar_addr_mode
-mem_address_mode (rtx mem)
+get_address_mode (const_rtx addr, addr_space_t as)
 {
-  machine_mode mode;
-
-  gcc_assert (MEM_P (mem));
-  mode = GET_MODE (XEXP (mem, 0));
+  auto mode = GET_MODE (addr);
   if (mode != VOIDmode)
     return as_a <scalar_addr_mode> (mode);
-  return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
+  return targetm.addr_space.address_mode (as);
+}
+
+/* Return the mode of MEM's address.  */
+
+scalar_addr_mode
+mem_address_mode (const_rtx mem)
+{
+  gcc_assert (MEM_P (mem));
+  return get_address_mode (XEXP (mem, 0), MEM_ADDR_SPACE (mem));
 }
 \f
 /* Split up a CONST_DOUBLE or integer constant rtx


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

only message in thread, other threads:[~2022-03-16 12:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-16 12:16 [gcc(refs/vendors/ARM/heads/morello)] Add get_address_mode 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).