diff options
author | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-22 19:00:45 +0000 |
---|---|---|
committer | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-22 19:00:45 +0000 |
commit | 59082b2ef2ef2aa4ae3487861a6dc80e4ceab57a (patch) | |
tree | 826b632674b92d865151e2b21d9bab5fbccdec94 /gcc | |
parent | ad81e87b095609db1ec93546b0648dea2899cade (diff) | |
download | gcc-59082b2ef2ef2aa4ae3487861a6dc80e4ceab57a.tar.gz |
2009-05-22 Vladimir Makarov <vmakarov@redhat.com>
PR target/39856
* reg-stack.c (subst_stack_regs_pat): Remove gcc_assert for note
for clobber.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147804 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/reg-stack.c | 24 |
2 files changed, 19 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 514f3c44521..45778026483 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-05-22 Vladimir Makarov <vmakarov@redhat.com> + + PR target/39856 + * reg-stack.c (subst_stack_regs_pat): Remove gcc_assert for note + for clobber. + 2009-05-22 Mark Mitchell <mark@codesourcery.com> * tree.c (handle_dll_attribute): Mark dllexport'd inlines as diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index c1fc8207ec2..2f94958a2e2 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -1371,21 +1371,23 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat) if (pat != PATTERN (insn)) { - /* The fix_truncdi_1 pattern wants to be able to allocate - its own scratch register. It does this by clobbering - an fp reg so that it is assured of an empty reg-stack - register. If the register is live, kill it now. - Remove the DEAD/UNUSED note so we don't try to kill it - later too. */ + /* The fix_truncdi_1 pattern wants to be able to + allocate its own scratch register. It does this by + clobbering an fp reg so that it is assured of an + empty reg-stack register. If the register is live, + kill it now. Remove the DEAD/UNUSED note so we + don't try to kill it later too. + + In reality the UNUSED note can be absent in some + complicated cases when the register is reused for + partially set variable. */ if (note) emit_pop_insn (insn, regstack, *dest, EMIT_BEFORE); else - { - note = find_reg_note (insn, REG_UNUSED, *dest); - gcc_assert (note); - } - remove_note (insn, note); + note = find_reg_note (insn, REG_UNUSED, *dest); + if (note) + remove_note (insn, note); replace_reg (dest, FIRST_STACK_REG + 1); } else |