Patchwork [PR49888,VTA] don't keep VALUEs bound to modified MEMs

login
register
mail settings
Submitter Alexandre Oliva
Date July 6, 2012, 11:27 a.m.
Message ID <orehopp1sc.fsf@livre.localdomain>
Download mbox | patch
Permalink /patch/169464/
State New
Headers show

Comments

Alexandre Oliva - July 6, 2012, 11:27 a.m.
On Jun 21, 2012, Alexandre Oliva <aoliva@redhat.com> wrote:

> for  gcc/ChangeLog
> from  Alexandre Oliva  <aoliva@redhat.com>

> 	PR debug/53671
> 	PR debug/49888
> 	* alias.c (memrefs_conflict_p): Improve handling of AND for
> 	alignment.
	
There was a thinko in this patch.  We can't move the offset by more than
we adjust the size, otherwise we fail to cover part of the required
range, as reported in PR rtl-optimization/53827.  This obvious patch
fixes it.  Regstrapped on x86_64- and i686-linux-gnu.  Uros confirmed it
fixed the bootstrap problem on alpha-linux-gnu.  I'm checking this in.

Patch

for  gcc/ChangeLog
from  Alexandre Oilva  <aoliva@redhat.com>

	PR rtl-optimization/53827
	PR debug/53671
	PR debug/49888
	* alias.c (memrefs_conflict_p): Adjust offset and size by the
	same amount for alignment ANDs.

Index: gcc/alias.c
===================================================================
--- gcc/alias.c.orig	2012-07-02 09:04:06.193137799 -0300
+++ gcc/alias.c	2012-07-02 09:04:08.000000000 -0300
@@ -2107,7 +2107,7 @@  memrefs_conflict_p (int xsize, rtx x, in
       if (xsize > 0 && sc < 0 && -uc == (uc & -uc))
 	{
 	  xsize -= sc + 1;
-	  c -= sc;
+	  c -= sc + 1;
 	  return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
 				     ysize, y, c);
 	}
@@ -2119,7 +2119,7 @@  memrefs_conflict_p (int xsize, rtx x, in
       if (ysize > 0 && sc < 0 && -uc == (uc & -uc))
 	{
 	  ysize -= sc + 1;
-	  c += sc;
+	  c += sc + 1;
 	  return memrefs_conflict_p (xsize, x,
 				     ysize, canon_rtx (XEXP (y, 0)), c);
 	}