Commit d746694a by Richard Kenner Committed by Richard Kenner

alias.c (nonoverlapping_memrefs_p): Not overlapping if one base is constant and one is on frame.

	* alias.c (nonoverlapping_memrefs_p): Not overlapping if one base is
	constant and one is on frame.
	If know memref offset, adjust size from decl.

From-SVN: r46925
parent 6f38bb17
Sun Nov 11 05:56:01 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* alias.c (nonoverlapping_memrefs_p): Not overlapping if one base is
constant and one is on frame.
If know memref offset, adjust size from decl.
2001-11-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2001-11-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* alpha/unicosmk.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Fix * alpha/unicosmk.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Fix
......
...@@ -1798,13 +1798,16 @@ nonoverlapping_memrefs_p (x, y) ...@@ -1798,13 +1798,16 @@ nonoverlapping_memrefs_p (x, y)
if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT) if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0); offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
/* If the bases are both constant and they are different, we know these /* If the bases are different, we know they do not overlap if both
do not overlap. If they are both registers, we can only deduce are constants or if one is a constant and the other a pointer into the
something if they are the same register. */ stack frame. Otherwise a different base means we can't tell if they
if (CONSTANT_P (basex) && CONSTANT_P (basey) && ! rtx_equal_p (basex, basey)) overlap or not. */
return 1; if (! rtx_equal_p (basex, basey))
else if (! rtx_equal_p (basex, basey)) return ((CONSTANT_P (basex) && CONSTANT_P (basey))
return 0; || (CONSTANT_P (basex) && REG_P (basey)
&& REGNO (basey) <= LAST_VIRTUAL_REGISTER)
|| (CONSTANT_P (basey) && REG_P (basex)
&& REGNO (basex) <= LAST_VIRTUAL_REGISTER));
sizex = (REG_P (rtlx) ? GET_MODE_SIZE (GET_MODE (rtlx)) sizex = (REG_P (rtlx) ? GET_MODE_SIZE (GET_MODE (rtlx))
: MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx)) : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
...@@ -1816,9 +1819,9 @@ nonoverlapping_memrefs_p (x, y) ...@@ -1816,9 +1819,9 @@ nonoverlapping_memrefs_p (x, y)
/* If we have an offset or size for either memref, it can update the values /* If we have an offset or size for either memref, it can update the values
computed above. */ computed above. */
if (MEM_OFFSET (x)) if (MEM_OFFSET (x))
offsetx += INTVAL (MEM_OFFSET (x)); offsetx += INTVAL (MEM_OFFSET (x)), sizex -= INTVAL (MEM_OFFSET (x));
if (MEM_OFFSET (y)) if (MEM_OFFSET (y))
offsety += INTVAL (MEM_OFFSET (y)); offsety += INTVAL (MEM_OFFSET (y)), sizey -= INTVAL (MEM_OFFSET (y));
if (MEM_SIZE (x)) if (MEM_SIZE (x))
sizex = INTVAL (MEM_SIZE (x)); sizex = INTVAL (MEM_SIZE (x));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment