diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2009-05-22 19:00:45 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2009-05-22 19:00:45 +0000 |
commit | 83a6ac60c6100cfa605da437391c1fd8b327055a (patch) | |
tree | 826b632674b92d865151e2b21d9bab5fbccdec94 /gcc/reg-stack.c | |
parent | 84c40c4a8f0b0b31f7692f89e9773f5d2cf78f5c (diff) | |
download | gcc-83a6ac60c6100cfa605da437391c1fd8b327055a.zip gcc-83a6ac60c6100cfa605da437391c1fd8b327055a.tar.gz gcc-83a6ac60c6100cfa605da437391c1fd8b327055a.tar.bz2 |
re PR target/39856 (ICE in subst_stack_regs_pat, at reg-stack.c:1386)
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.
From-SVN: r147804
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index c1fc820..2f94958 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 |