+Fri Oct 2 01:24:19 1998 Geoff Keating <geoffk@ozemail.com.au>
+
+ * 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.
+
Fri Oct 2 01:20:04 1998 Richard Earnshaw (rearnsha@arm.com)
* arm.c (add_constant): New parameter address_only, change caller.
\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;
{
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;
}
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);
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;
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]);