summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>2012-08-27 22:11:48 +0000
committermkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>2012-08-27 22:11:48 +0000
commita7a503a534667063f880bdf0c84cd4dddc6fb385 (patch)
treec9824c8286739cd359de0b9bffbc913025882f11
parenta56120628ee0de387c7dd271968ff0327045a5a8 (diff)
downloadgcc-a7a503a534667063f880bdf0c84cd4dddc6fb385.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190733 138bc75d-0d04-0410-961f-82ee72b054a4
-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 5139e98cc96..48fa237cf92 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 a8b0d521912..1055ef4bba2 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);