aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2006-12-06 00:25:29 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2006-12-06 00:25:29 +0000
commit2372a0625790417f2ca021d3e5016554930900a4 (patch)
tree8f23a2d5a22c2df0faa8b10efd1d8f88584bf73b
parente80dc930bed449d1e2dcb0873013fb402c96da6b (diff)
downloadgcc-2372a0625790417f2ca021d3e5016554930900a4.zip
gcc-2372a0625790417f2ca021d3e5016554930900a4.tar.gz
gcc-2372a0625790417f2ca021d3e5016554930900a4.tar.bz2
reload1.c (delete_output_reload): Count occurrences in CALL_INSN_FUNCTION_USAGE.
* reload1.c (delete_output_reload): Count occurrences in CALL_INSN_FUNCTION_USAGE. * rtlanal.c (count_occurrences): Handle EXPR_LIST nodes without crashing at the end of the list. From-SVN: r119571
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/reload1.c3
-rw-r--r--gcc/rtlanal.c6
3 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cba8137..3804f2d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-12-06 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * reload1.c (delete_output_reload): Count occurrences in
+ CALL_INSN_FUNCTION_USAGE.
+ * rtlanal.c (count_occurrences): Handle EXPR_LIST nodes without
+ crashing at the end of the list.
+
2006-12-05 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-structalias.c (set_used_smts): Re-fix pr29156.
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 88b89fe..fdab86c 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -7972,6 +7972,9 @@ delete_output_reload (rtx insn, int j, int last_reload_reg)
}
}
n_occurrences = count_occurrences (PATTERN (insn), reg, 0);
+ if (CALL_P (insn) && CALL_INSN_FUNCTION_USAGE (insn))
+ n_occurrences += count_occurrences (CALL_INSN_FUNCTION_USAGE (insn),
+ reg, 0);
if (substed)
n_occurrences += count_occurrences (PATTERN (insn),
eliminate_regs (substed, 0,
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 6b96443..4b965f8 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -509,6 +509,12 @@ count_occurrences (rtx x, rtx find, int count_dest)
case CC0:
return 0;
+ case EXPR_LIST:
+ count = count_occurrences (XEXP (x, 0), find, count_dest);
+ if (XEXP (x, 1))
+ count += count_occurrences (XEXP (x, 1), find, count_dest);
+ return count;
+
case MEM:
if (MEM_P (find) && rtx_equal_p (x, find))
return 1;