aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-02-04 15:06:04 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-02-04 15:06:04 -0800
commitebbb0a63f48a678ebc3b6064a60304aeb7662268 (patch)
treeb65c47de638a18cfb8b68bee82e4ba352c4a8d25 /gcc/combine.c
parentae4b4a02e878b8ec473d5cabd3b043fe8dfd8940 (diff)
downloadgcc-ebbb0a63f48a678ebc3b6064a60304aeb7662268.zip
gcc-ebbb0a63f48a678ebc3b6064a60304aeb7662268.tar.gz
gcc-ebbb0a63f48a678ebc3b6064a60304aeb7662268.tar.bz2
combine.c (nonzero_bits): Re-introduce special case for sp/fp/ap wrt REGNO_POINTER_ALIGN.
* combine.c (nonzero_bits): Re-introduce special case for sp/fp/ap wrt REGNO_POINTER_ALIGN. From-SVN: r49501
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 7662b9b..269731f 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -7896,8 +7896,13 @@ nonzero_bits (x, mode)
#endif
/* Include declared information about alignment of pointers. */
-
- if (REG_POINTER (x) && REGNO_POINTER_ALIGN (REGNO (x)))
+ /* ??? We don't properly preserve REG_POINTER changes across
+ pointer-to-integer casts, so we can't trust it except for
+ things that we know must be pointers. See execute/960116-1.c. */
+ if ((x == stack_pointer_rtx
+ || x == frame_pointer_rtx
+ || x == arg_pointer_rtx)
+ && REGNO_POINTER_ALIGN (REGNO (x)))
{
unsigned HOST_WIDE_INT alignment
= REGNO_POINTER_ALIGN (REGNO (x)) / BITS_PER_UNIT;