diff options
author | Jeff Law <law@redhat.com> | 2019-03-27 10:18:06 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2019-03-27 10:18:06 -0600 |
commit | 52295c2de4adcd0f5a6ee9b5a4f57cd156182cf0 (patch) | |
tree | 28016165b85dfcc8719ec17c7574c11867044d6f /gcc | |
parent | ce4609958f8db5cd64ec1c3bec624a36d8b35812 (diff) | |
download | gcc-52295c2de4adcd0f5a6ee9b5a4f57cd156182cf0.zip gcc-52295c2de4adcd0f5a6ee9b5a4f57cd156182cf0.tar.gz gcc-52295c2de4adcd0f5a6ee9b5a4f57cd156182cf0.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/regcprop.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/pr89826.c | 21 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07a1333..f8a353d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +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 diff --git a/gcc/regcprop.c b/gcc/regcprop.c index 8ca523f..3efe21f 100644 --- a/gcc/regcprop.c +++ b/gcc/regcprop.c @@ -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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0679cb7..b2c649c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +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. diff --git a/gcc/testsuite/gcc.c-torture/execute/pr89826.c b/gcc/testsuite/gcc.c-torture/execute/pr89826.c new file mode 100644 index 0000000..0916448 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr89826.c @@ -0,0 +1,21 @@ +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; +} + |