From dc2dfdb6b7111997a3dd80146b0256810a532b0b Mon Sep 17 00:00:00 2001
From: kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 12 Nov 2001 16:56:48 +0000
Subject: 	* alias.c (nonoverlapping_memrefs_p): Only update size from
 memref 	if both size and offset known.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46956 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/alias.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

(limited to 'gcc/alias.c')

diff --git a/gcc/alias.c b/gcc/alias.c
index 45e82643ad7..7f01c0c7396 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -1817,16 +1817,19 @@ nonoverlapping_memrefs_p (x, y)
 	   : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
 	   -1);
 
-  /* If we have an offset or size for either memref, it can update the values
-     computed above.  */
+  /* If we have an offset for either memref, it can update the values computed
+     above.  */
   if (MEM_OFFSET (x))
     offsetx += INTVAL (MEM_OFFSET (x)), sizex -= INTVAL (MEM_OFFSET (x));
   if (MEM_OFFSET (y))
     offsety += INTVAL (MEM_OFFSET (y)), sizey -= INTVAL (MEM_OFFSET (y));
 
-  if (MEM_SIZE (x))
+  /* If a memref has both a size and an offset, we can use the smaller size.
+     We can't do this is the offset isn't know because we must view this
+     memref as being anywhere inside the DECL's MEM.  */
+  if (MEM_SIZE (x) && MEM_OFFSET (x))
     sizex = INTVAL (MEM_SIZE (x));
-  if (MEM_SIZE (y))
+  if (MEM_SIZE (y) && MEM_OFFSET (y))
     sizey = INTVAL (MEM_SIZE (y));
 
   /* Put the values of the memref with the lower offset in X's values.  */
-- 
cgit v1.2.1