aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-04-12 15:47:34 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-04-12 15:47:34 -0700
commit2f15e255eda3a0ef4e8f07c0176198ec0a1be7c5 (patch)
tree20073095e154766bb4d21c028a51e77ddd6319b4
parentef290537a3018e8ce7f449b8b3dfefa7efcc2be6 (diff)
downloadgcc-2f15e255eda3a0ef4e8f07c0176198ec0a1be7c5.zip
gcc-2f15e255eda3a0ef4e8f07c0176198ec0a1be7c5.tar.gz
gcc-2f15e255eda3a0ef4e8f07c0176198ec0a1be7c5.tar.bz2
recog.c (offsettable_address_p): Match the logic in adjust_address.
* recog.c (offsettable_address_p): Match the logic in adjust_address. * config/sparc/sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Handle TFmode in 64-bit mode only. Use only for 32-bit or MEDLOW. From-SVN: r52250
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/sparc/sparc.h5
-rw-r--r--gcc/recog.c4
3 files changed, 13 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3fef212..8056982 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2002-04-12 Richard Henderson <rth@redhat.com>
+
+ * recog.c (offsettable_address_p): Match the logic in adjust_address.
+
+ * config/sparc/sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Handle TFmode
+ in 64-bit mode only. Use only for 32-bit or MEDLOW.
+
2002-04-12 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* config/alpha/osf.h (LINK_SPEC): Pass -S to silence ld warnings.
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 3ebe626..d48b8dd 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -2336,12 +2336,13 @@ do { \
/* Decompose SImode constants into hi+lo_sum. We do have to \
rerecognize what we produce, so be careful. */ \
if (CONSTANT_P (X) \
- && (MODE != TFmode || TARGET_V9) \
+ && (MODE != TFmode || TARGET_ARCH64) \
&& GET_MODE (X) == SImode \
&& GET_CODE (X) != LO_SUM && GET_CODE (X) != HIGH \
&& ! (flag_pic \
&& (symbolic_operand (X, Pmode) \
- || pic_address_needs_scratch (X)))) \
+ || pic_address_needs_scratch (X))) \
+ && sparc_cmodel <= CM_MEDLOW) \
{ \
X = gen_rtx_LO_SUM (GET_MODE (X), \
gen_rtx_HIGH (GET_MODE (X), X), X); \
diff --git a/gcc/recog.c b/gcc/recog.c
index 7987d20..2720d8e 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -1969,7 +1969,9 @@ 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. adjust_address will
go inside a LO_SUM here, so we do so as well. */
- if (GET_CODE (y) == LO_SUM)
+ if (GET_CODE (y) == LO_SUM
+ && mode != BLKmode
+ && mode_sz <= GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT)
z = gen_rtx_LO_SUM (GET_MODE (y), XEXP (y, 0),
plus_constant (XEXP (y, 1), mode_sz - 1));
else