aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1996-05-22 14:41:29 -0700
committerJim Wilson <wilson@gcc.gnu.org>1996-05-22 14:41:29 -0700
commitee49a9c7be5b61f467f7049517c9f8ded05e0f39 (patch)
treeb59ca6b695275c1669e8b5ea3cdee2f821aeccd9
parentbab34d98aa820c0302e2d6c79a375ff3ef719216 (diff)
downloadgcc-ee49a9c7be5b61f467f7049517c9f8ded05e0f39.zip
gcc-ee49a9c7be5b61f467f7049517c9f8ded05e0f39.tar.gz
gcc-ee49a9c7be5b61f467f7049517c9f8ded05e0f39.tar.bz2
(nonzero_bits): Don't assume arg pointer has same
alignment as stack pointer. From-SVN: r12079
-rw-r--r--gcc/combine.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 3bb8dea..7ba5c9a 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -6974,8 +6974,13 @@ nonzero_bits (x, mode)
stack to be momentarily aligned only to that amount, so we pick
the least alignment. */
+ /* We can't check for arg_pointer_rtx here, because it is not
+ guaranteed to have as much alignment as the stack pointer.
+ In particular, in the Irix6 n64 ABI, the stack has 128 bit
+ alignment but the argument pointer has only 64 bit alignment. */
+
if (x == stack_pointer_rtx || x == frame_pointer_rtx
- || x == arg_pointer_rtx || x == hard_frame_pointer_rtx
+ || x == hard_frame_pointer_rtx
|| (REGNO (x) >= FIRST_VIRTUAL_REGISTER
&& REGNO (x) <= LAST_VIRTUAL_REGISTER))
{