* sched-deps.c (add_dependence_list_and_free): Simplify.
authormkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Aug 2012 22:11:48 +0000 (22:11 +0000)
committermkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Aug 2012 22:11:48 +0000 (22:11 +0000)
(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

gcc/ChangeLog
gcc/sched-deps.c

index 5139e98..48fa237 100644 (file)
@@ -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
index a8b0d52..1055ef4 100644 (file)
@@ -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);