diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-11-05 22:25:29 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-11-05 22:25:29 +0000 |
commit | 7deddfded2d013c07a639873a4c90bfed40fd03e (patch) | |
tree | 3df2a52207fec5bec55c28303aa57a8bd9b4e620 /gcc/ira.c | |
parent | c79b54af83c8031caac515081fb7c56a127b90e3 (diff) | |
download | gcc-7deddfded2d013c07a639873a4c90bfed40fd03e.tar.gz |
2010-11-05 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 166377
2010-11-05 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 166377
* gcc/Makefile.in (MELT_RAW_CFLAGS): removed LIBELFINC
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@166380 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ira.c')
-rw-r--r-- | gcc/ira.c | 8 |
1 files changed, 6 insertions, 2 deletions
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); |