From 7bdebc3aac6749afb5fad62e7b1ee35aec238e08 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 24 May 2000 23:17:05 -0700 Subject: [PATCH] recog.c (offsettable_address_p): If mode size is zero, assume BIGGEST_ALIGNMENT. * recog.c (offsettable_address_p): If mode size is zero, assume BIGGEST_ALIGNMENT. From-SVN: r34158 --- gcc/ChangeLog | 5 +++++ gcc/recog.c | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5505e1792b..07a0d5a690b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-05-24 Richard Henderson + + * recog.c (offsettable_address_p): If mode size is zero, assume + BIGGEST_ALIGNMENT. + 2000-05-24 J. David Anglin * configure.in: Check for -Wno-long-long option support and improve 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