diff options
author | Geoff Keating <geoffk@ozemail.com.au> | 1998-09-15 23:32:22 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-09-15 17:32:22 -0600 |
commit | b86ba9c89d0446621f23af72bc7e4e88f3ed01c3 (patch) | |
tree | a494e24c2826b77cc1c16bc6c0b4f510486c71b6 /gcc/gcse.c | |
parent | fa88e837bfe83bfced127267f20c28ddec97b22d (diff) | |
download | gcc-b86ba9c89d0446621f23af72bc7e4e88f3ed01c3.zip gcc-b86ba9c89d0446621f23af72bc7e4e88f3ed01c3.tar.gz gcc-b86ba9c89d0446621f23af72bc7e4e88f3ed01c3.tar.bz2 |
gcse.c: New definition NEVER_SET for reg_first_set...
* 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.
From-SVN: r22441
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r-- | gcc/gcse.c | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -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]); |