From ebbb0a63f48a678ebc3b6064a60304aeb7662268 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 4 Feb 2002 15:06:04 -0800 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/combine.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf46b29b504..c38eaa4d162 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-02-04 Richard Henderson + + * combine.c (nonzero_bits): Re-introduce special case for + sp/fp/ap wrt REGNO_POINTER_ALIGN. + 2002-02-05 Aldy Hernandez * doc/extend.texi: Warn about unsupported usage of altivec diff --git a/gcc/combine.c b/gcc/combine.c index 7662b9b6908..269731ff972 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; -- 2.30.2