Commit 5312b066 by Jakub Jelinek Committed by Jakub Jelinek

alias.c (memrefs_conflict_p): If x and y are the same VALUE, don't call get_addr on both.

	* alias.c (memrefs_conflict_p): If x and y are the same VALUE,
	don't call get_addr on both.  If one expression is a VALUE and
	the other a REG, check VALUE's locs if the REG isn't among them.

From-SVN: r158401
parent d5cc2ee3
2010-04-16 Jakub Jelinek <jakub@redhat.com>
* alias.c (memrefs_conflict_p): If x and y are the same VALUE,
don't call get_addr on both. If one expression is a VALUE and
the other a REG, check VALUE's locs if the REG isn't among them.
2010-04-16 Christian Bruel <christian.bruel@st.com>
* config/sh/sh.h (sh_frame_pointer_required): New function.
......
......@@ -1789,9 +1789,39 @@ static int
memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c)
{
if (GET_CODE (x) == VALUE)
x = get_addr (x);
{
if (REG_P (y))
{
struct elt_loc_list *l;
for (l = CSELIB_VAL_PTR (x)->locs; l; l = l->next)
if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, y))
break;
if (l)
x = y;
else
x = get_addr (x);
}
/* Don't call get_addr if y is the same VALUE. */
else if (x != y)
x = get_addr (x);
}
if (GET_CODE (y) == VALUE)
y = get_addr (y);
{
if (REG_P (x))
{
struct elt_loc_list *l;
for (l = CSELIB_VAL_PTR (y)->locs; l; l = l->next)
if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, x))
break;
if (l)
y = x;
else
y = get_addr (y);
}
/* Don't call get_addr if x is the same VALUE. */
else if (y != x)
y = get_addr (y);
}
if (GET_CODE (x) == HIGH)
x = XEXP (x, 0);
else if (GET_CODE (x) == LO_SUM)
......
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