aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2007-04-17 15:29:34 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2007-04-17 15:29:34 +0000
commitf2eb49dcfaf3c6d6bb344e7a175576148a7d310e (patch)
treefd0b64bc3ce899a06a2c0e1d070967984f1085ae /gcc
parent710a179f8acbd09a88742b2fde7d3887a327736b (diff)
downloadgcc-f2eb49dcfaf3c6d6bb344e7a175576148a7d310e.zip
gcc-f2eb49dcfaf3c6d6bb344e7a175576148a7d310e.tar.gz
gcc-f2eb49dcfaf3c6d6bb344e7a175576148a7d310e.tar.bz2
re PR rtl-optimization/10692 ([m68k] miscompilation of perl with -O2 -fPIC)
* reload1.c (delete_output_reload): Don't count output in n_inherited. Revert 2005-01-05 Richard Henderson <rth@redhat.com> PR rtl-opt/10692 * reload1.c (do_input_reload): Restrict the optimization deleteing a previous output reload to RELOAD_FOR_INPUT. From-SVN: r123913
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/reload1.c15
2 files changed, 11 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d065322..a315b6f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2007-04-17 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * reload1.c (delete_output_reload): Don't count output in n_inherited.
+
+ Revert
+ 2005-01-05 Richard Henderson <rth@redhat.com>
+ PR rtl-opt/10692
+ * reload1.c (do_input_reload): Restrict the optimization deleteing
+ a previous output reload to RELOAD_FOR_INPUT.
+
2007-04-17 Dorit Nuzman <dorit@il.ibm.com>
* tree-vectorizer.h (stmt_vec_info_type): Add enum value
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 9a56fc4..8c698ef 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -7156,10 +7156,6 @@ do_input_reload (struct insn_chain *chain, struct reload *rl, int j)
actually no need to store the old value in it. */
if (optimize
- /* Only attempt this for input reloads; for RELOAD_OTHER we miss
- that there may be multiple uses of the previous output reload.
- Restricting to RELOAD_FOR_INPUT is mostly paranoia. */
- && rl->when_needed == RELOAD_FOR_INPUT
&& (reload_inherited[j] || reload_override_in[j])
&& rl->reg_rtx
&& REG_P (rl->reg_rtx)
@@ -8010,16 +8006,7 @@ delete_output_reload (rtx insn, int j, int last_reload_reg)
if (rtx_equal_p (reg2, reg))
{
if (reload_inherited[k] || reload_override_in[k] || k == j)
- {
- n_inherited++;
- reg2 = rld[k].out_reg;
- if (! reg2)
- continue;
- while (GET_CODE (reg2) == SUBREG)
- reg2 = XEXP (reg2, 0);
- if (rtx_equal_p (reg2, reg))
- n_inherited++;
- }
+ n_inherited++;
else
return;
}