Commit 52295c2d by Jeff Law Committed by Jeff Law

re PR rtl-optimization/87761 ([MIPS] New FAIL: gcc.target/mips/fix-r4000-10.c …

re PR rtl-optimization/87761 ([MIPS] New FAIL: gcc.target/mips/fix-r4000-10.c   -O1 start with r265398)

	PR rtl-optimization/87761
	PR rtl-optimization/89826
	* regcprop.c (copyprop_hardreg_forward_1): Move may_trap_p test
	slightly later.
	(pass_cprop_hardreg::execute): Call df_analyze after adding the
	note problem to get REG_DEAD/REG_UNUSED notes updated.

	PR rtl-optimization/87761
	PR rtl-optimization/89826
	* gcc.c-torture/execute/pr89826.c: New test.

From-SVN: r269967
parent ce460995
2019-03-27 Jeff Law <law@redhat.com>
PR rtl-optimization/87761
PR rtl-optimization/89826
* regcprop.c (copyprop_hardreg_forward_1): Move may_trap_p test
slightly later.
(pass_cprop_hardreg::execute): Call df_analyze after adding the
note problem to get REG_DEAD/REG_UNUSED notes updated.
2019-03-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/89463
......
......@@ -800,9 +800,9 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
/* Detect obviously dead sets (via REG_UNUSED notes) and remove them. */
if (set
&& !may_trap_p (set)
&& !RTX_FRAME_RELATED_P (insn)
&& INSN_P (insn)
&& !may_trap_p (set)
&& find_reg_note (insn, REG_UNUSED, SET_DEST (set))
&& !side_effects_p (SET_SRC (set))
&& !side_effects_p (SET_DEST (set)))
......@@ -1293,7 +1293,10 @@ pass_cprop_hardreg::execute (function *fun)
auto_sbitmap visited (last_basic_block_for_fn (fun));
bitmap_clear (visited);
/* We need accurate notes. Earlier passes such as if-conversion may
leave notes in an inconsistent state. */
df_note_add_problem ();
df_analyze ();
/* It is tempting to set DF_LR_RUN_DCE, but DCE may choose to delete
an insn and this pass would not have visibility into the removal.
......
2019-03-26 Jeff Law <law@redhat.com>
PR rtl-optimization/87761
PR rtl-optimization/89826
* gcc.c-torture/execute/pr89826.c: New test.
2019-03-27 Richard Biener <rguenther@suse.de>
* gcc.dg/torture/20190327-1.c: New testcase.
......
typedef unsigned int u32;
typedef unsigned long long u64;
u64 a;
u32 b;
u64
foo (u32 d)
{
a -= d ? 0 : ~a;
return a + b;
}
int
main (void)
{
u64 x = foo (2);
if (x != 0)
__builtin_abort();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment