OSDN Git Service

* haifa-sched.c (dep_cost_1): Recognize the producer even if the
authornemet <nemet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Sep 2008 05:24:57 +0000 (05:24 +0000)
committernemet <nemet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Sep 2008 05:24:57 +0000 (05:24 +0000)
consumer is an asm.  Add comment why this is important.
(choose_ready): Add comment to the "INSN_CODE (insn) >= 0 ||
recog_memoized (insn) < 0" assert.  Put ENABLE_CHECKING around
it.

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

gcc/ChangeLog
gcc/haifa-sched.c

index 81cddbc..6c2e2b3 100644 (file)
@@ -1,3 +1,11 @@
+2008-09-17  Adam Nemet  <anemet@caviumnetworks.com>
+
+       * haifa-sched.c (dep_cost_1): Recognize the producer even if the
+       consumer is an asm.  Add comment why this is important.
+       (choose_ready): Add comment to the "INSN_CODE (insn) >= 0 ||
+       recog_memoized (insn) < 0" assert.  Put ENABLE_CHECKING around
+       it.
+
 2008-09-17  Joseph Myers  <joseph@codesourcery.com>
 
        * expr.c (emit_group_store): Do not shift before moving via a
index ba60437..46640c4 100644 (file)
@@ -646,10 +646,12 @@ insn_cost (rtx insn)
 
 /* Compute cost of dependence LINK.
    This is the number of cycles between instruction issue and
-   instruction results.  */
+   instruction results.
+   ??? We also use this function to call recog_memoized on all insns.  */
 int
 dep_cost_1 (dep_t link, dw_t dw)
 {
+  rtx insn = DEP_PRO (link);
   rtx used = DEP_CON (link);
   int cost;
 
@@ -657,10 +659,12 @@ dep_cost_1 (dep_t link, dw_t dw)
      This allows the computation of a function's result and parameter
      values to overlap the return and call.  */
   if (recog_memoized (used) < 0)
-    cost = 0;
+    {
+      cost = 0;
+      recog_memoized (insn);
+    }
   else
     {
-      rtx insn = DEP_PRO (link);
       enum reg_note dep_type = DEP_TYPE (link);
 
       cost = insn_cost (insn);
@@ -2312,8 +2316,14 @@ choose_ready (struct ready_list *ready, rtx *insn_ptr)
          {
            insn = ready_element (ready, i);
 
+#ifdef ENABLE_CHECKING
+           /* If this insn is recognizable we should have already
+              recognized it earlier.
+              ??? Not very clear where this is supposed to be done.
+              See dep_cost_1.  */
            gcc_assert (INSN_CODE (insn) >= 0
                        || recog_memoized (insn) < 0);
+#endif
 
            ready_try [i]
              = (/* INSN_CODE check can be omitted here as it is also done later