From: Jeff Law Date: Thu, 4 Nov 2010 13:15:33 +0000 (-0600) Subject: ira.c (validate_equiv_mem): Remove code to avoid invalidation of readonly memory... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a22265a4f9303a025c5291037d74f167a7b2590d;p=gcc.git ira.c (validate_equiv_mem): Remove code to avoid invalidation of readonly memory equivalances for... * ira.c (validate_equiv_mem): Remove code to avoid invalidation of readonly memory equivalances for const/pure calls. From-SVN: r166309 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a2e1cc88391..c5fe9b290bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-11-04 Jeff Law + + * ira.c (validate_equiv_mem): Remove code to avoid invalidation + of readonly memory equivalances for const/pure calls. + 2010-11-04 Richard Guenther PR tree-optimization/45733 diff --git a/gcc/ira.c b/gcc/ira.c index e84230e1c3e..d37247f55b1 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -1915,8 +1915,12 @@ validate_equiv_mem (rtx start, rtx reg, rtx memref) if (find_reg_note (insn, REG_DEAD, reg)) return 1; - if (CALL_P (insn) && ! MEM_READONLY_P (memref) - && ! RTL_CONST_OR_PURE_CALL_P (insn)) + /* This used to ignore readonly memory and const/pure calls. The problem + is the equivalent form may reference a pseudo which gets assigned a + call clobbered hard reg. When we later replace REG with its + equivalent form, the value in the call-clobbered reg has been + changed and all hell breaks loose. */ + if (CALL_P (insn)) return 0; note_stores (PATTERN (insn), validate_equiv_mem_from_store, NULL);