aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/regcprop.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8/gcc/regcprop.c')
-rw-r--r--gcc-4.8/gcc/regcprop.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/regcprop.c b/gcc-4.8/gcc/regcprop.c
index 97a023fc1..896902f30 100644
--- a/gcc-4.8/gcc/regcprop.c
+++ b/gcc-4.8/gcc/regcprop.c
@@ -1015,6 +1015,13 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
EXECUTE_IF_SET_IN_HARD_REG_SET (regs_invalidated_by_call, 0, regno, hrsi)
if (regno < set_regno || regno >= set_regno + set_nregs)
kill_value_regno (regno, 1, vd);
+
+ /* If SET was seen in CALL_INSN_FUNCTION_USAGE, and SET_SRC
+ of the SET isn't in regs_invalidated_by_call hard reg set,
+ but instead among CLOBBERs on the CALL_INSN, we could wrongly
+ assume the value in it is still live. */
+ if (ksvd.ignore_set_reg)
+ note_stores (PATTERN (insn), kill_clobbered_value, vd);
}
/* Notice stores. */