summaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-15 23:32:22 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-15 23:32:22 +0000
commitb98a24f645909ef2c4be619451b065b1ac59e659 (patch)
treea494e24c2826b77cc1c16bc6c0b4f510486c71b6 /gcc/gcse.c
parentd28b1ff24fc244c6b44eb368fcab171c87431801 (diff)
downloadgcc-b98a24f645909ef2c4be619451b065b1ac59e659.tar.gz
* gcse.c: New definition NEVER_SET for reg_first_set, reg_last_set,
mem_first_set, mem_last_set; because 0 can be a CUID. (oprs_unchanged_p): Use new definition. (record_last_reg_set_info): Likewise. (record_last_mem_set_info): Likewise. (compute_hash_table): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22441 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r--gcc/gcse.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index b51754aa26a..f0efdb7a4ac 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -1055,6 +1055,8 @@ compute_sets (f)
/* Hash table support. */
+#define NEVER_SET -1
+
/* For each register, the cuid of the first/last insn in the block to set it,
or zero if not set. */
static int *reg_first_set;
@@ -1130,22 +1132,22 @@ oprs_unchanged_p (x, insn, avail_p)
{
case REG:
if (avail_p)
- return (reg_last_set[REGNO (x)] == 0
+ return (reg_last_set[REGNO (x)] == NEVER_SET
|| reg_last_set[REGNO (x)] < INSN_CUID (insn));
else
- return (reg_first_set[REGNO (x)] == 0
+ return (reg_first_set[REGNO (x)] == NEVER_SET
|| reg_first_set[REGNO (x)] >= INSN_CUID (insn));
case MEM:
if (avail_p)
{
- if (mem_last_set != 0
+ if (mem_last_set != NEVER_SET
&& mem_last_set >= INSN_CUID (insn))
return 0;
}
else
{
- if (mem_first_set != 0
+ if (mem_first_set != NEVER_SET
&& mem_first_set < INSN_CUID (insn))
return 0;
}
@@ -1959,7 +1961,7 @@ record_last_reg_set_info (insn, regno)
rtx insn;
int regno;
{
- if (reg_first_set[regno] == 0)
+ if (reg_first_set[regno] == NEVER_SET)
reg_first_set[regno] = INSN_CUID (insn);
reg_last_set[regno] = INSN_CUID (insn);
SET_BIT (reg_set_in_block[BLOCK_NUM (insn)], regno);
@@ -1971,7 +1973,7 @@ static void
record_last_mem_set_info (insn)
rtx insn;
{
- if (mem_first_set == 0)
+ if (mem_first_set == NEVER_SET)
mem_first_set = INSN_CUID (insn);
mem_last_set = INSN_CUID (insn);
mem_set_in_block[BLOCK_NUM (insn)] = 1;
@@ -2041,16 +2043,17 @@ compute_hash_table (f, set_p)
rtx insn;
int regno;
int in_libcall_block;
+ int i;
/* First pass over the instructions records information used to
determine when registers and memory are first and last set.
??? The mem_set_in_block and hard-reg reg_set_in_block computation
could be moved to compute_sets since they currently don't change. */
- bzero ((char *) reg_first_set, max_gcse_regno * sizeof (int));
- bzero ((char *) reg_last_set, max_gcse_regno * sizeof (int));
- mem_first_set = 0;
- mem_last_set = 0;
+ for (i = 0; i < max_gcse_regno; i++)
+ reg_first_set[i] = reg_last_set[i] = NEVER_SET;
+ mem_first_set = NEVER_SET;
+ mem_last_set = NEVER_SET;
for (insn = basic_block_head[bb];
insn && insn != NEXT_INSN (basic_block_end[bb]);