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).