diff options
author | Jan Hubicka <jh@suse.cz> | 2000-01-06 14:03:58 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2000-01-06 13:03:58 +0000 |
commit | 3040ffd65141f584f2f1801ea79b5f77951ee276 (patch) | |
tree | 3cfe44a5fdf95ca0e24c5a2920c44035ffb06f08 | |
parent | 4cf962a2b4db3f712fdbc2c6d0d0a1def88c2e40 (diff) | |
download | gcc-3040ffd65141f584f2f1801ea79b5f77951ee276.zip gcc-3040ffd65141f584f2f1801ea79b5f77951ee276.tar.gz gcc-3040ffd65141f584f2f1801ea79b5f77951ee276.tar.bz2 |
reg-stack.c (subst_stack_regs_pat): Handle correctly USEs of dead registers.
* reg-stack.c (subst_stack_regs_pat): Handle correctly USEs of
dead registers.
* i386.c (movsf splitter): Fix typo in my last checkin.
From-SVN: r31256
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 2 | ||||
-rw-r--r-- | gcc/reg-stack.c | 18 |
3 files changed, 23 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b345602..271ae69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Thu Jan 6 13:44:59 CET 2000 Jan Hubicka <jh@suse.cz> + + * reg-stack.c (subst_stack_regs_pat): Handle correctly USEs of + dead registers. + + * i386.c (movsf splitter): Fix typo in my last checkin. + 2000-01-05 Nick Clifton <nickc@cygnus.com> * varasm.c (IN_NAMED_SECTION): Allow targets to provide their diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 3addccb..f9316de 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1788,7 +1788,7 @@ [(set_attr "type" "fmov,fmov,fmov,imov,imov")]) (define_split - [(set (match_operand:SF 0 "general_operand" "") + [(set (match_operand:SF 0 "nonimmediate_operand" "") (match_operand:SF 1 "memory_operand" ""))] "reload_completed && GET_CODE (operands[1]) == MEM diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index de4c75a..2e7fc64 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -1383,12 +1383,24 @@ subst_stack_regs_pat (insn, regstack, pat) if (STACK_REG_P (*src) && find_regno_note (insn, REG_DEAD, REGNO (*src))) { - emit_pop_insn (insn, regstack, *src, EMIT_AFTER); + /* In stupid allocation the USE might be used to extend lifetime + of variable to given scope. This may end up as USE of dead + register. */ + if (optimize || get_hard_regnum (regstack, *src) != -1) + emit_pop_insn (insn, regstack, *src, EMIT_AFTER); return; } - /* ??? Uninitialized USE should not happen. */ else if (get_hard_regnum (regstack, *src) == -1) - abort(); + { + if (optimize) + abort(); + if (GET_CODE (PATTERN (insn)) != USE) + abort(); + PATTERN (insn) = gen_rtx_SET (GET_MODE (*src), *src, + CONST0_RTX (GET_MODE (*src))); + subst_stack_regs_pat (insn, regstack, PATTERN (insn)); + return; + } break; case CLOBBER: |