diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-04 16:28:50 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-04 16:28:50 +0000 |
commit | 53622482f0ed55e3e41d433c5987524f436223f9 (patch) | |
tree | 807a0763c83b8408e6375a2965d0837b8dbb7208 /gcc | |
parent | 15eb3fa600de0fa0e30dbf2e03a81fca1d3bd3c1 (diff) | |
download | gcc-53622482f0ed55e3e41d433c5987524f436223f9.tar.gz |
* cfgcleanup.c (thread_jump): Update call of cselib_init.
* cselib.c (cselib_record_memory): New static variable.
(cselib_lookup_mem, cselib_record_set, cselib_record_sets):
Give up on memories when asked for.
(cselib_init): Accept new argument.
* cselib.h (cselib_init): Update prototype.
* gcse.c (local_cprop_pass): Update call of cselib_init.
* loop.c (load_mems): Update call of cselib_init.
* postreload.c (reload_cse_regs_1): Update call of cselib_init.
* sched-deps.c (sched_analyze): Update call of cselib_init.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78917 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/cfgcleanup.c | 2 | ||||
-rw-r--r-- | gcc/cselib.c | 14 | ||||
-rw-r--r-- | gcc/cselib.h | 2 | ||||
-rw-r--r-- | gcc/gcse.c | 2 | ||||
-rw-r--r-- | gcc/loop.c | 2 | ||||
-rw-r--r-- | gcc/postreload.c | 2 | ||||
-rw-r--r-- | gcc/sched-deps.c | 2 |
8 files changed, 29 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d5faea05e75..d9bb157867f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2004-03-04 Jan Hubicka <jh@suse.cz> + + * cfgcleanup.c (thread_jump): Update call of cselib_init. + * cselib.c (cselib_record_memory): New static variable. + (cselib_lookup_mem, cselib_record_set, cselib_record_sets): + Give up on memories when asked for. + (cselib_init): Accept new argument. + * cselib.h (cselib_init): Update prototype. + * gcse.c (local_cprop_pass): Update call of cselib_init. + * loop.c (load_mems): Update call of cselib_init. + * postreload.c (reload_cse_regs_1): Update call of cselib_init. + * sched-deps.c (sched_analyze): Update call of cselib_init. + 2004-03-04 David Edelsohn <edelsohn@gnu.org> GP <gp@qnx.com> diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index f6bf6e743d6..b2dd0937d5a 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -349,7 +349,7 @@ thread_jump (int mode, edge e, basic_block b) return NULL; } - cselib_init (); + cselib_init (false); /* First process all values computed in the source basic block. */ for (insn = NEXT_INSN (BB_HEAD (e->src)); insn != NEXT_INSN (BB_END (e->src)); diff --git a/gcc/cselib.c b/gcc/cselib.c index 31a6d70a4bb..0dfb1a6c118 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -42,6 +42,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "params.h" #include "alloc-pool.h" +static bool cselib_record_memory; static int entry_and_rtx_equal_p (const void *, const void *); static hashval_t get_value_hash (const void *); static struct elt_list *new_elt_list (struct elt_list *, cselib_val *); @@ -748,6 +749,7 @@ cselib_lookup_mem (rtx x, int create) struct elt_list *l; if (MEM_VOLATILE_P (x) || mode == BLKmode + || !cselib_record_memory || (FLOAT_MODE_P (mode) && flag_float_store)) return 0; @@ -1201,7 +1203,8 @@ cselib_record_set (rtx dest, cselib_val *src_elt, cselib_val *dest_addr_elt) n_useless_values--; src_elt->locs = new_elt_loc_list (src_elt->locs, dest); } - else if (GET_CODE (dest) == MEM && dest_addr_elt != 0) + else if (GET_CODE (dest) == MEM && dest_addr_elt != 0 + && cselib_record_memory) { if (src_elt->locs == 0) n_useless_values--; @@ -1275,7 +1278,8 @@ cselib_record_sets (rtx insn) sets[i].dest = dest = XEXP (dest, 0); /* We don't know how to record anything but REG or MEM. */ - if (GET_CODE (dest) == REG || GET_CODE (dest) == MEM) + if (GET_CODE (dest) == REG + || (GET_CODE (dest) == MEM && cselib_record_memory)) { rtx src = sets[i].src; if (cond) @@ -1320,7 +1324,8 @@ cselib_record_sets (rtx insn) for (i = 0; i < n_sets; i++) { rtx dest = sets[i].dest; - if (GET_CODE (dest) == REG || GET_CODE (dest) == MEM) + if (GET_CODE (dest) == REG + || (GET_CODE (dest) == MEM && cselib_record_memory)) cselib_record_set (dest, sets[i].src_elt, sets[i].dest_addr_elt); } } @@ -1398,7 +1403,7 @@ cselib_process_insn (rtx insn) init_alias_analysis. */ void -cselib_init (void) +cselib_init (bool record_memory) { elt_list_pool = create_alloc_pool ("elt_list", sizeof (struct elt_list), 10); @@ -1408,6 +1413,7 @@ cselib_init (void) sizeof (cselib_val), 10); value_pool = create_alloc_pool ("value", RTX_SIZE (VALUE), 100); + cselib_record_memory = record_memory; /* This is only created once. */ if (! callmem) callmem = gen_rtx_MEM (BLKmode, const0_rtx); diff --git a/gcc/cselib.h b/gcc/cselib.h index 2060a81c041..3dea471ad35 100644 --- a/gcc/cselib.h +++ b/gcc/cselib.h @@ -64,7 +64,7 @@ struct elt_list GTY(()) }; extern cselib_val *cselib_lookup (rtx, enum machine_mode, int); -extern void cselib_init (void); +extern void cselib_init (bool record_memory); extern void cselib_finish (void); extern void cselib_process_insn (rtx); extern enum machine_mode cselib_reg_set_mode (rtx); diff --git a/gcc/gcse.c b/gcc/gcse.c index 975fb1fbe2f..ce4d201b698 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -4407,7 +4407,7 @@ local_cprop_pass (int alter_jumps) rtx libcall_stack[MAX_NESTED_LIBCALLS + 1], *libcall_sp; bool changed = false; - cselib_init (); + cselib_init (false); libcall_sp = &libcall_stack[MAX_NESTED_LIBCALLS]; *libcall_sp = 0; for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) diff --git a/gcc/loop.c b/gcc/loop.c index d4e891007c2..c4ca250b910 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -9797,7 +9797,7 @@ load_mems (const struct loop *loop) ; prev_ebb_head = p; - cselib_init (); + cselib_init (true); /* Build table of mems that get set to constant values before the loop. */ diff --git a/gcc/postreload.c b/gcc/postreload.c index 4a09421ffbf..26404e3c5bd 100644 --- a/gcc/postreload.c +++ b/gcc/postreload.c @@ -181,7 +181,7 @@ reload_cse_regs_1 (rtx first) rtx insn; rtx testreg = gen_rtx_REG (VOIDmode, -1); - cselib_init (); + cselib_init (true); init_alias_analysis (); for (insn = first; insn; insn = NEXT_INSN (insn)) diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index ccd9a32f915..754142f137c 100644 --- a/gcc/sched-deps.c +++ b/gcc/sched-deps.c @@ -1156,7 +1156,7 @@ sched_analyze (struct deps *deps, rtx head, rtx tail) rtx loop_notes = 0; if (current_sched_info->use_cselib) - cselib_init (); + cselib_init (true); for (insn = head;; insn = NEXT_INSN (insn)) { |