cse.c (cse_insn): Initialise all regcost variables.
authorGraham Stott <grahams@redhat.com>
Thu, 23 Nov 2000 11:04:45 +0000 (11:04 +0000)
committerGraham Stott <grahams@gcc.gnu.org>
Thu, 23 Nov 2000 11:04:45 +0000 (11:04 +0000)
        * cse.c (cse_insn): Initialise all regcost variables.
        Fix a typo add missing '='.
        Only compare costs if there is a replacement insn.

From-SVN: r37694

gcc/ChangeLog
gcc/cse.c

index 7c7411c..6721de1 100644 (file)
@@ -1,3 +1,9 @@
+2000-11-23  Graham Stott  <grahams@redhat.com>
+
+       * cse.c (cse_insn): Initialise all regcost variables.
+       Fix a typo add missing '='.
+       Only compare costs if there is a replacement insn.
+
 Thu Nov 23 04:33:33 2000  Alexandre Oliva  <aoliva@redhat.com>
 
        * final.c (output_addr_const) [LABEL_REF]: Simplify.
index d36816a..f89067a 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4941,10 +4941,16 @@ cse_insn (insn, libcall_insn)
       rtx src_const = 0;
       rtx src_related = 0;
       struct table_elt *src_const_elt = 0;
-      int src_cost = MAX_COST, src_eqv_cost = MAX_COST, src_folded_cost = MAX_COST;
-      int src_related_cost = MAX_COST, src_elt_cost = MAX_COST;
-      int src_regcost, src_eqv_regcost, src_folded_regcost;
-      int src_related_regcost, src_elt_regcost;
+      int src_cost = MAX_COST;
+      int src_eqv_cost = MAX_COST;
+      int src_folded_cost = MAX_COST;
+      int src_related_cost = MAX_COST;
+      int src_elt_cost = MAX_COST;
+      int src_regcost = MAX_COST;
+      int src_eqv_regcost = MAX_COST;
+      int src_folded_regcost = MAX_COST;
+      int src_related_regcost = MAX_COST;
+      int src_elt_regcost = MAX_COST;
       /* Set non-zero if we need to call force_const_mem on with the
         contents of src_folded before using it.  */
       int src_folded_force_flag = 0;
@@ -5395,7 +5401,7 @@ cse_insn (insn, libcall_insn)
       /* If this was an indirect jump insn, a known label will really be
         cheaper even though it looks more expensive.  */
       if (dest == pc_rtx && src_const && GET_CODE (src_const) == LABEL_REF)
-       src_folded = src_const, src_folded_cost = src_folded_regcost -1;
+       src_folded = src_const, src_folded_cost = src_folded_regcost -1;
 
       /* Terminate loop when replacement made.  This must terminate since
          the current contents will be tested and will always be valid.  */
@@ -5436,8 +5442,9 @@ cse_insn (insn, libcall_insn)
           /* Find cheapest and skip it for the next time.   For items
             of equal cost, use this order:
             src_folded, src, src_eqv, src_related and hash table entry.  */
-         if (preferrable (src_folded_cost, src_folded_regcost,
-                          src_cost, src_regcost) <= 0
+         if (src_folded
+             && preferrable (src_folded_cost, src_folded_regcost,
+                             src_cost, src_regcost) <= 0
              && preferrable (src_folded_cost, src_folded_regcost,
                              src_eqv_cost, src_eqv_regcost) <= 0
              && preferrable (src_folded_cost, src_folded_regcost,
@@ -5449,20 +5456,23 @@ cse_insn (insn, libcall_insn)
              if (src_folded_force_flag)
                trial = force_const_mem (mode, trial);
            }
-         else if (preferrable (src_cost, src_regcost,
-                               src_eqv_cost, src_eqv_regcost) <= 0
+         else if (src
+                  && preferrable (src_cost, src_regcost,
+                                  src_eqv_cost, src_eqv_regcost) <= 0
                   && preferrable (src_cost, src_regcost,
                                   src_related_cost, src_related_regcost) <= 0
                   && preferrable (src_cost, src_regcost,
                                   src_elt_cost, src_elt_regcost) <= 0)
            trial = src, src_cost = MAX_COST;
-         else if (preferrable (src_eqv_cost, src_eqv_regcost,
-                               src_related_cost, src_related_regcost) <= 0
+         else if (src_eqv_here
+                  && preferrable (src_eqv_cost, src_eqv_regcost,
+                                  src_related_cost, src_related_regcost) <= 0
                   && preferrable (src_eqv_cost, src_eqv_regcost,
                                   src_elt_cost, src_elt_regcost) <= 0)
            trial = copy_rtx (src_eqv_here), src_eqv_cost = MAX_COST;
-         else if (preferrable (src_related_cost, src_related_regcost,
-                               src_elt_cost, src_elt_regcost) <= 0)
+         else if (src_related
+                  && preferrable (src_related_cost, src_related_regcost,
+                                  src_elt_cost, src_elt_regcost) <= 0)
            trial = copy_rtx (src_related), src_related_cost = MAX_COST;
          else
            {