aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMaxim Kuvyrkov <maxim@codesourcery.com>2012-08-27 22:11:48 +0000
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>2012-08-27 22:11:48 +0000
commit8febe3fad2ea28c55be831e815ec9f036f2f288e (patch)
treec9824c8286739cd359de0b9bffbc913025882f11 /gcc
parent28591f4a8cbfab06692dcd8ae9a69ef95ecdf378 (diff)
downloadgcc-8febe3fad2ea28c55be831e815ec9f036f2f288e.zip
gcc-8febe3fad2ea28c55be831e815ec9f036f2f288e.tar.gz
gcc-8febe3fad2ea28c55be831e815ec9f036f2f288e.tar.bz2
sched-deps.c (add_dependence_list_and_free): Simplify.
* sched-deps.c (add_dependence_list_and_free): Simplify. (flush_pending_list_and_free): Fix a hack that was fixing a hack. Free lists when add_dependence_list_and_free doesn't free them. From-SVN: r190733
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/sched-deps.c24
2 files changed, 18 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5139e98..48fa237 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-08-27 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ * sched-deps.c (add_dependence_list_and_free): Simplify.
+ (flush_pending_list_and_free): Fix a hack that was fixing a hack. Free
+ lists when add_dependence_list_and_free doesn't free them.
+
2012-08-27 Uros Bizjak <ubizjak@gmail.com>
PR target/46254
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index a8b0d52..1055ef4 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -1564,24 +1564,15 @@ static void
add_dependence_list_and_free (struct deps_desc *deps, rtx insn, rtx *listp,
int uncond, enum reg_note dep_type)
{
- rtx list, next;
+ add_dependence_list (insn, *listp, uncond, dep_type);
/* We don't want to short-circuit dependencies involving debug
insns, because they may cause actual dependencies to be
disregarded. */
if (deps->readonly || DEBUG_INSN_P (insn))
- {
- add_dependence_list (insn, *listp, uncond, dep_type);
- return;
- }
+ return;
- for (list = *listp, *listp = NULL; list ; list = next)
- {
- next = XEXP (list, 1);
- if (uncond || ! sched_insns_conditions_mutex_p (insn, XEXP (list, 0)))
- add_dependence (insn, XEXP (list, 0), dep_type);
- free_INSN_LIST_node (list);
- }
+ free_INSN_LIST_list (listp);
}
/* Remove all occurrences of INSN from LIST. Return the number of
@@ -1765,6 +1756,15 @@ flush_pending_lists (struct deps_desc *deps, rtx insn, int for_read,
add_dependence_list_and_free (deps, insn, &deps->pending_jump_insns, 1,
REG_DEP_ANTI);
+ if (DEBUG_INSN_P (insn))
+ {
+ if (for_write)
+ free_INSN_LIST_list (&deps->pending_read_insns);
+ free_INSN_LIST_list (&deps->pending_write_insns);
+ free_INSN_LIST_list (&deps->last_pending_memory_flush);
+ free_INSN_LIST_list (&deps->pending_jump_insns);
+ }
+
if (!deps->readonly)
{
free_EXPR_LIST_list (&deps->pending_write_mems);