]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cse.c (approx_reg_cost_1, [...]): Recode to not use regsets.
authorDavid S. Miller <davem@redhat.com>
Thu, 23 May 2002 16:37:58 +0000 (09:37 -0700)
committerDavid S. Miller <davem@gcc.gnu.org>
Thu, 23 May 2002 16:37:58 +0000 (09:37 -0700)
2002-05-23  David S. Miller  <davem@redhat.com>

* cse.c (approx_reg_cost_1, approx_reg_cost): Recode to not use
regsets.

From-SVN: r53793

gcc/ChangeLog
gcc/cse.c

index be5370c4eae899d56f4761453d38cd8dd11e0691..f3ed28a0c2f25fa9210b602988f569029d76ec3f 100644 (file)
@@ -1,3 +1,8 @@
+2002-05-23  David S. Miller  <davem@redhat.com>
+
+       * cse.c (approx_reg_cost_1, approx_reg_cost): Recode to not use
+       regsets.
+
 2002-05-23  Jason Thorpe  <thorpej@wasabisystems.com>
 
        * c-common.c (warn_nonnull): Declare.
index 514ba406ab04e6181684d54e45dee104d6943b72..9cc048b85f0f416b9d02288ae6dd267f7339f1bb 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -720,10 +720,25 @@ approx_reg_cost_1 (xp, data)
      void *data;
 {
   rtx x = *xp;
-  regset set = (regset) data;
+  int *cost_p = data;
 
   if (x && GET_CODE (x) == REG)
-    SET_REGNO_REG_SET (set, REGNO (x));
+    {
+      unsigned int regno = REGNO (x);
+
+      if (! CHEAP_REGNO (regno))
+       {
+         if (regno < FIRST_PSEUDO_REGISTER)
+           {
+             if (SMALL_REGISTER_CLASSES)
+               return 1;
+             *cost_p += 2;
+           }
+         else
+           *cost_p += 1;
+       }
+    }
+
   return 0;
 }
 
@@ -736,28 +751,12 @@ static int
 approx_reg_cost (x)
      rtx x;
 {
-  regset_head set;
-  int i;
   int cost = 0;
-  int hardregs = 0;
-
-  INIT_REG_SET (&set);
-  for_each_rtx (&x, approx_reg_cost_1, (void *) &set);
-
-  EXECUTE_IF_SET_IN_REG_SET
-    (&set, 0, i,
-     {
-       if (! CHEAP_REGNO (i))
-        {
-          if (i < FIRST_PSEUDO_REGISTER)
-            hardregs++;
 
-          cost += i < FIRST_PSEUDO_REGISTER ? 2 : 1;
-        }
-     });
+  if (for_each_rtx (&x, approx_reg_cost_1, (void *) &cost))
+    return MAX_COST;
 
-  CLEAR_REG_SET (&set);
-  return hardregs && SMALL_REGISTER_CLASSES ? MAX_COST : cost;
+  return cost;
 }
 
 /* Return a negative value if an rtx A, whose costs are given by COST_A