aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1996-03-26 08:45:03 -0700
committerJeff Law <law@gcc.gnu.org>1996-03-26 08:45:03 -0700
commit9c7be814e66b0964a80c6b6c850083489c9aa219 (patch)
tree07677d1bb86d5a7a407901443c3687a92d27f0a0
parentbed95fa1acd34ab70a1799a20b280376db7fdafc (diff)
downloadgcc-9c7be814e66b0964a80c6b6c850083489c9aa219.zip
gcc-9c7be814e66b0964a80c6b6c850083489c9aa219.tar.gz
gcc-9c7be814e66b0964a80c6b6c850083489c9aa219.tar.bz2
expr.c (emit_push_insn): When doing a partial push...
* 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
-rw-r--r--gcc/expr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index bcfcf97..47735da 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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)