diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-03 15:22:47 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-03 15:22:47 +0000 |
commit | 6964f9982ac6480ee5278bdfcb3eeaea096f6e90 (patch) | |
tree | f50e6822ef00b12e31e63af407c46260d2f638b7 /gcc/gcse.c | |
parent | 09add867642b764d20321382027ac1a27271bb06 (diff) | |
download | gcc-6964f9982ac6480ee5278bdfcb3eeaea096f6e90.tar.gz |
* gcse.c (delete_null_pointer_checks_1): Do not use delelete_list;
call purge_dead_edges after removing.
(delete_null_pointer_checks): Do not handle delete_list.
* cfgbuild.c (inside_basic_block_p, control_flow_insn_p): Break out from ...
(count_basic_blocks): ... here.
(find_basic_blocks, find_bb_boundaries): Cleanup.
* stor-layout.c (fixup_signed_type, fixup_unsigned_type): Avoid
overflow for types greater then 2 * HOST_WIDE_INT.
* reload.c (find_reloads): Update the duplicates after swapingg.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47551 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r-- | gcc/gcse.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c index a9d113f8ef0..e6cc5132606 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -656,7 +656,7 @@ static int handle_avail_expr PARAMS ((rtx, struct expr *)); static int classic_gcse PARAMS ((void)); static int one_classic_gcse_pass PARAMS ((int)); static void invalidate_nonnull_info PARAMS ((rtx, rtx, void *)); -static void delete_null_pointer_checks_1 PARAMS ((varray_type *, unsigned int *, +static void delete_null_pointer_checks_1 PARAMS ((unsigned int *, sbitmap *, sbitmap *, struct null_pointer_info *)); static rtx process_insert_insn PARAMS ((struct expr *)); @@ -5194,9 +5194,8 @@ invalidate_nonnull_info (x, setter, data) they are not our responsibility to free. */ static void -delete_null_pointer_checks_1 (delete_list, block_reg, nonnull_avin, +delete_null_pointer_checks_1 (block_reg, nonnull_avin, nonnull_avout, npi) - varray_type *delete_list; unsigned int *block_reg; sbitmap *nonnull_avin; sbitmap *nonnull_avout; @@ -5326,12 +5325,11 @@ delete_null_pointer_checks_1 (delete_list, block_reg, nonnull_avin, LABEL_NUSES (JUMP_LABEL (new_jump))++; emit_barrier_after (new_jump); } - if (!*delete_list) - VARRAY_RTX_INIT (*delete_list, 10, "delete_list"); - VARRAY_PUSH_RTX (*delete_list, last_insn); + delete_insn (last_insn); if (compare_and_branch == 2) - VARRAY_PUSH_RTX (*delete_list, earliest); + delete_insn (earliest); + purge_dead_edges (BASIC_BLOCK (bb)); /* Don't check this block again. (Note that BLOCK_END is invalid here; we deleted the last instruction in the @@ -5370,12 +5368,10 @@ delete_null_pointer_checks (f) { sbitmap *nonnull_avin, *nonnull_avout; unsigned int *block_reg; - varray_type delete_list = NULL; int bb; int reg; int regs_per_pass; int max_reg; - unsigned int i; struct null_pointer_info npi; /* If we have only a single block, then there's nothing to do. */ @@ -5444,18 +5440,10 @@ delete_null_pointer_checks (f) { npi.min_reg = reg; npi.max_reg = MIN (reg + regs_per_pass, max_reg); - delete_null_pointer_checks_1 (&delete_list, block_reg, nonnull_avin, + delete_null_pointer_checks_1 (block_reg, nonnull_avin, nonnull_avout, &npi); } - /* Now delete the instructions all at once. This breaks the CFG. */ - if (delete_list) - { - for (i = 0; i < VARRAY_ACTIVE_SIZE (delete_list); i++) - delete_related_insns (VARRAY_RTX (delete_list, i)); - VARRAY_FREE (delete_list); - } - /* Free the table of registers compared at the end of every block. */ free (block_reg); |