OSDN Git Service

* reg-stack.c (subst_stack_regs_pat): Handle correctly USEs of
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 6 Jan 2000 13:03:58 +0000 (13:03 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 6 Jan 2000 13:03:58 +0000 (13:03 +0000)
dead registers.

* i386.c (movsf splitter): Fix typo in my last checkin.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31256 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/reg-stack.c

index b345602..271ae69 100644 (file)
@@ -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
index 3addccb..f9316de 100644 (file)
   [(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
index de4c75a..2e7fc64 100644 (file)
@@ -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: