expr.c (emit_push_insn): When doing a partial push...
authorJeff Law <law@gcc.gnu.org>
Tue, 26 Mar 1996 15:45:03 +0000 (08:45 -0700)
committerJeff Law <law@gcc.gnu.org>
Tue, 26 Mar 1996 15:45:03 +0000 (08:45 -0700)
        * expr.c (emit_push_insn): When doing a partial push, emit
        a CLOBBER so that flow doesn't think the entire register
        is live.

From-SVN: r11622

gcc/expr.c

index bcfcf97..47735da 100644 (file)
@@ -2350,6 +2350,12 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
      Default is below for small data on big-endian machines; else above.  */
   enum direction where_pad = FUNCTION_ARG_PADDING (mode, type);
 
+  /* If we're placing part of X into a register and part of X onto
+     the stack, indicate that the entire register is clobbered to
+     keep flow from thinking the unused part of the register is live.  */
+  if (partial)
+    emit_insn (gen_rtx (CLOBBER, VOIDmode, reg));
+
   /* Invert direction if stack is post-update.  */
   if (STACK_PUSH_CODE == POST_INC || STACK_PUSH_CODE == POST_DEC)
     if (where_pad != none)