From 3040ffd65141f584f2f1801ea79b5f77951ee276 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 6 Jan 2000 14:03:58 +0100 Subject: 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 --- gcc/reg-stack.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'gcc/reg-stack.c') 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: -- cgit v1.1