diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-09-15 23:32:22 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-09-15 23:32:22 +0000 |
commit | b98a24f645909ef2c4be619451b065b1ac59e659 (patch) | |
tree | a494e24c2826b77cc1c16bc6c0b4f510486c71b6 /gcc/gcse.c | |
parent | d28b1ff24fc244c6b44eb368fcab171c87431801 (diff) | |
download | gcc-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.c | 23 |
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]); |