diff options
author | David S. Miller <davem@redhat.com> | 2002-05-23 09:37:58 -0700 |
---|---|---|
committer | David S. Miller <davem@gcc.gnu.org> | 2002-05-23 09:37:58 -0700 |
commit | c863f8c2fa41625ae9e770d051146caec882bf36 (patch) | |
tree | 7db800c574409ae957b5ba34bbdd00d9fb66930d /gcc/cse.c | |
parent | da2c31aee994a650c6aa9f36e556eeec8396e1df (diff) | |
download | gcc-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/cse.c')
-rw-r--r-- | gcc/cse.c | 41 |
1 files changed, 20 insertions, 21 deletions
@@ -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 |