(stupid_life_analysis): Make sure a function result reg
authorDoug Evans <dje@gnu.org>
Sun, 15 May 1994 01:25:47 +0000 (01:25 +0000)
committerDoug Evans <dje@gnu.org>
Sun, 15 May 1994 01:25:47 +0000 (01:25 +0000)
is still live if it contains an argument.

From-SVN: r7301

gcc/stupid.c

index ca9d44cc5e79dafeb933ce025f87b29ca3a9a46b..1293d5da5b26f5f989d17bad2171def117165e2b 100644 (file)
@@ -199,6 +199,13 @@ stupid_life_analysis (f, nregs, file)
        if (regs_live[i])
          SET_HARD_REG_BIT (*p, i);
 
+      /* Update which hard regs are currently live
+        and also the birth and death suids of pseudo regs
+        based on the pattern of this insn.  */
+
+      if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
+       stupid_mark_refs (PATTERN (insn), insn);
+
       /* Mark all call-clobbered regs as live after each call insn
         so that a pseudo whose life span includes this insn
         will not go in one of them.
@@ -215,15 +222,11 @@ stupid_life_analysis (f, nregs, file)
            if (call_used_regs[i])
              regs_live[i] = 0;
 
+         /* It is important that this be done after processing the insn's
+            pattern because we want the function result register to still
+            be live if it's also used to pass arguments.  */
          stupid_mark_refs (CALL_INSN_FUNCTION_USAGE (insn), insn);
        }
-
-      /* Update which hard regs are currently live
-        and also the birth and death suids of pseudo regs
-        based on the pattern of this insn.  */
-
-      if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
-       stupid_mark_refs (PATTERN (insn), insn);
     }
 
   /* Now decide the order in which to allocate the pseudo registers.  */