OSDN Git Service

* sched-int.h (struct _dep): Add member cost.
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Jul 2011 10:18:32 +0000 (10:18 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Jul 2011 10:18:32 +0000 (10:18 +0000)
(DEP_COST, UNKNOWN_DEP_COST): New macros.
* sched-deps.c (init_dep_1): Initialize DEP_COST.
* haifa-sched.c (dep_cost_1): Use and set DEP_COST.
(sched_change_pattern): Reset it for dependent insns.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176226 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/haifa-sched.c
gcc/sched-deps.c
gcc/sched-int.h

index 6b83a43..3e604c4 100644 (file)
@@ -1,3 +1,11 @@
+2011-07-13  Bernd Schmidt  <bernds@codesourcery.com>
+
+       * sched-int.h (struct _dep): Add member cost.
+       (DEP_COST, UNKNOWN_DEP_COST): New macros.
+       * sched-deps.c (init_dep_1): Initialize DEP_COST.
+       * haifa-sched.c (dep_cost_1): Use and set DEP_COST.
+       (sched_change_pattern): Reset it for dependent insns.
+
 2011-07-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * Makefile.in (CRT0STUFF_T_CFLAGS): Remove.
index f4caecd..bc36d07 100644 (file)
@@ -854,6 +854,9 @@ dep_cost_1 (dep_t link, dw_t dw)
   rtx used = DEP_CON (link);
   int cost;
 
+  if (DEP_COST (link) != UNKNOWN_DEP_COST)
+    return DEP_COST (link);
+
   /* A USE insn should never require the value used to be computed.
      This allows the computation of a function's result and parameter
      values to overlap the return and call.  We don't care about the
@@ -911,6 +914,7 @@ dep_cost_1 (dep_t link, dw_t dw)
        cost = 0;
     }
 
+  DEP_COST (link) = cost;
   return cost;
 }
 
@@ -4865,11 +4869,21 @@ fix_recovery_deps (basic_block rec)
 void
 sched_change_pattern (rtx insn, rtx new_pat)
 {
+  sd_iterator_def sd_it;
+  dep_t dep;
   int t;
 
   t = validate_change (insn, &PATTERN (insn), new_pat, 0);
   gcc_assert (t);
   dfa_clear_single_insn_cache (insn);
+
+  for (sd_it = sd_iterator_start (insn, (SD_LIST_FORW | SD_LIST_BACK
+                                        | SD_LIST_RES_BACK));
+       sd_iterator_cond (&sd_it, &dep);)
+    {
+      DEP_COST (dep) = UNKNOWN_DEP_COST;
+      sd_iterator_next (&sd_it);
+    }
 }
 
 /* Change pattern of INSN to NEW_PAT.  Invalidate cached haifa
index 343d03c..4ceea72 100644 (file)
@@ -107,6 +107,7 @@ init_dep_1 (dep_t dep, rtx pro, rtx con, enum reg_note type, ds_t ds)
   DEP_CON (dep) = con;
   DEP_TYPE (dep) = type;
   DEP_STATUS (dep) = ds;
+  DEP_COST (dep) = UNKNOWN_DEP_COST;
 }
 
 /* Init DEP with the arguments.
index f310f8a..8b39a22 100644 (file)
@@ -215,6 +215,9 @@ struct _dep
   /* Dependency status.  This field holds all dependency types and additional
      information for speculative dependencies.  */
   ds_t status;
+
+  /* Cached cost of the dependency.  */
+  int cost;
 };
 
 typedef struct _dep dep_def;
@@ -224,6 +227,9 @@ typedef dep_def *dep_t;
 #define DEP_CON(D) ((D)->con)
 #define DEP_TYPE(D) ((D)->type)
 #define DEP_STATUS(D) ((D)->status)
+#define DEP_COST(D) ((D)->cost)
+
+#define UNKNOWN_DEP_COST INT_MIN
 
 /* Functions to work with dep.  */