From patchwork Fri Jul 6 11:27:47 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [PR49888,VTA] don't keep VALUEs bound to modified MEMs Date: Fri, 06 Jul 2012 01:27:47 -0000 From: Alexandre Oliva X-Patchwork-Id: 169464 Message-Id: To: Uros Bizjak Cc: Richard Guenther , "H.J. Lu" , Richard Henderson , Jakub Jelinek , gcc-patches@gcc.gnu.org On Jun 21, 2012, Alexandre Oliva wrote: > for gcc/ChangeLog > from Alexandre Oliva > 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. for gcc/ChangeLog from Alexandre Oilva 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); }