summaryrefslogtreecommitdiffstats
path: root/gcc/recog.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-05-25 06:17:05 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-05-25 06:17:05 +0000
commita8d9af1141fbeefb6e5e68f2e12e5cac4f940315 (patch)
treeb4f2ac22b53112db27c204fe31a04ee8fa666af7 /gcc/recog.c
parentdf3cb9848e58ebf1f28b6f9fee11a7cec5b2fd7e (diff)
downloadppe42-gcc-a8d9af1141fbeefb6e5e68f2e12e5cac4f940315.tar.gz
ppe42-gcc-a8d9af1141fbeefb6e5e68f2e12e5cac4f940315.zip
* recog.c (offsettable_address_p): If mode size is zero, assume
BIGGEST_ALIGNMENT. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34158 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/recog.c')
-rw-r--r--gcc/recog.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/recog.c b/gcc/recog.c
index ee3862805cd..643abb413f8 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -1847,6 +1847,7 @@ offsettable_address_p (strictp, mode, y)
rtx *y2;
int (*addressp) PARAMS ((enum machine_mode, rtx)) =
(strictp ? strict_memory_address_p : memory_address_p);
+ unsigned int mode_sz = GET_MODE_SIZE (mode);
if (CONSTANT_ADDRESS_P (y))
return 1;
@@ -1857,6 +1858,13 @@ offsettable_address_p (strictp, mode, y)
if (mode_dependent_address_p (y))
return 0;
+ /* ??? How much offset does an offsettable BLKmode reference need?
+ Clearly that depends on the situation in which it's being used.
+ However, the current situation in which we test 0xffffffff is
+ less than ideal. Caveat user. */
+ if (mode_sz == 0)
+ mode_sz = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
+
/* If the expression contains a constant term,
see if it remains valid when max possible offset is added. */
@@ -1865,7 +1873,7 @@ offsettable_address_p (strictp, mode, y)
int good;
y1 = *y2;
- *y2 = plus_constant (*y2, GET_MODE_SIZE (mode) - 1);
+ *y2 = plus_constant (*y2, mode_sz - 1);
/* Use QImode because an odd displacement may be automatically invalid
for any wider mode. But it should be valid for a single byte. */
good = (*addressp) (QImode, y);
@@ -1884,7 +1892,7 @@ offsettable_address_p (strictp, mode, y)
of the specified mode. We assume that if Y and Y+c are
valid addresses then so is Y+d for all 0<d<c. */
- z = plus_constant_for_output (y, GET_MODE_SIZE (mode) - 1);
+ z = plus_constant_for_output (y, mode_sz - 1);
/* Use QImode because an odd displacement may be automatically invalid
for any wider mode. But it should be valid for a single byte. */
OpenPOWER on IntegriCloud