From: Segher Boessenkool Date: Thu, 22 Jan 2015 00:35:44 +0000 (+0100) Subject: re PR rtl-optimization/64682 (wrong code at -O2 and -O3 on x86_64-linux-gnu) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c8b90a13c729f6fb33a97c4f4cd8116e5ef7fdf1;p=gcc.git re PR rtl-optimization/64682 (wrong code at -O2 and -O3 on x86_64-linux-gnu) PR rtl-optimization/64682 * combine.c (distribute_notes): When moving a death note for a register that is set in the new I2, make sure to put it before that new I2. PR rtl-optimization/64682 * gcc.c-torture/execute/pr64682.c: New file. From-SVN: r219981 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 756c37de896..c292bfc1b8c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-01-21 Segher Boessenkool + + PR rtl-optimization/64682 + * combine.c (distribute_notes): When moving a death note for + a register that is set in the new I2, make sure to put it + before that new I2. + 2015-01-21 David Edelsohn * config/rs6000/rs6000.c (rs6000_file_start): Use rs6000_isa_flags diff --git a/gcc/combine.c b/gcc/combine.c index 597aa8035ff..5c763b4a1d5 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -13684,6 +13684,11 @@ distribute_notes (rtx notes, rtx_insn *from_insn, rtx_insn *i3, rtx_insn *i2, || rtx_equal_p (XEXP (note, 0), elim_i0)) break; tem_insn = i3; + /* If the new I2 sets the same register that is marked dead + in the note, the note now should not be put on I2, as the + note refers to a previous incarnation of the reg. */ + if (i2 != 0 && reg_set_p (XEXP (note, 0), PATTERN (i2))) + tem_insn = i2; } if (place == 0) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f093c78841c..2a54aff7fca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-01-21 Segher Boessenkool + + PR rtl-optimization/64682 + * gcc.c-torture/execute/pr64682.c: New file. + 2015-01-21 Jakub Jelinek PR debug/64511