aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid S. Miller <davem@redhat.com>2002-05-23 09:37:58 -0700
committerDavid S. Miller <davem@gcc.gnu.org>2002-05-23 09:37:58 -0700
commitc863f8c2fa41625ae9e770d051146caec882bf36 (patch)
tree7db800c574409ae957b5ba34bbdd00d9fb66930d /gcc
parentda2c31aee994a650c6aa9f36e556eeec8396e1df (diff)
downloadgcc-c863f8c2fa41625ae9e770d051146caec882bf36.zip
gcc-c863f8c2fa41625ae9e770d051146caec882bf36.tar.gz
gcc-c863f8c2fa41625ae9e770d051146caec882bf36.tar.bz2
cse.c (approx_reg_cost_1, [...]): Recode to not use regsets.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cse.c41
2 files changed, 25 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index be5370c..f3ed28a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cse.c b/gcc/cse.c
index 514ba40..9cc048b 100644
--- 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