summaryrefslogtreecommitdiff
path: root/gcc/regcprop.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2019-02-26 10:08:06 -0700
committerJeff Law <law@gcc.gnu.org>2019-02-26 10:08:06 -0700
commitf73675e3c7503d6d48ea5ac29cd9b5e9d007668f (patch)
tree27dca3a9798238978aeb505c5e6945a926edb54e /gcc/regcprop.c
parent067aef033f3a9ad971fc75ce0631c500de0f0423 (diff)
re PR rtl-optimization/87761 ([MIPS] New FAIL: gcc.target/mips/fix-r4000-10.c -O1 start with r265398)
PR rtl-optimization/87761 * regcprop.c (copyprop_hardreg_forward_1): Use REG_UNUSED notes to detect obviously dead insns and delete them. From-SVN: r269218
Diffstat (limited to 'gcc/regcprop.c')
-rw-r--r--gcc/regcprop.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/regcprop.c b/gcc/regcprop.c
index e6bdeb07d8f..926df40f954 100644
--- a/gcc/regcprop.c
+++ b/gcc/regcprop.c
@@ -798,6 +798,22 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
}
}
+ /* Detect obviously dead sets (via REG_UNUSED notes) and remove them. */
+ if (set
+ && INSN_P (insn)
+ && !may_trap_p (insn)
+ && find_reg_note (insn, REG_UNUSED, SET_DEST (set))
+ && !side_effects_p (SET_SRC (set))
+ && !side_effects_p (SET_DEST (set)))
+ {
+ bool last = insn == BB_END (bb);
+ delete_insn (insn);
+ if (last)
+ break;
+ continue;
+ }
+
+
extract_constrain_insn (insn);
preprocess_constraints (insn);
const operand_alternative *op_alt = which_op_alt ();