diff options
author | Mostafa Hagog <mustafa@il.ibm.com> | 2005-06-01 05:17:59 +0000 |
---|---|---|
committer | Mostafa Hagog <hagog@gcc.gnu.org> | 2005-06-01 05:17:59 +0000 |
commit | 16c5b95d4100ba3522d9c26eb3843b78f3ae8f6b (patch) | |
tree | 909c379f8919b6dbcfdeb4a0662aa91e2b1bc55d /gcc/gcse.c | |
parent | bf3ddf8a1f39e6c7cbf18535b184b077b3dd41be (diff) | |
download | gcc-16c5b95d4100ba3522d9c26eb3843b78f3ae8f6b.zip gcc-16c5b95d4100ba3522d9c26eb3843b78f3ae8f6b.tar.gz gcc-16c5b95d4100ba3522d9c26eb3843b78f3ae8f6b.tar.bz2 |
gcse.c (compute_transp, [...]): Use MEM_READONLY_P.
2005-06-01 Mostafa Hagog <mustafa@il.ibm.com>
* gcse.c (compute_transp, load_killed_in_block): Use MEM_READONLY_P.
From-SVN: r100425
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r-- | gcc/gcse.c | 83 |
1 files changed, 45 insertions, 38 deletions
@@ -1370,6 +1370,11 @@ static int load_killed_in_block_p (basic_block bb, int uid_limit, rtx x, int avail_p) { rtx list_entry = modify_mem_list[bb->index]; + + /* If this is a readonly then we aren't going to be changing it. */ + if (MEM_READONLY_P (x)) + return 0; + while (list_entry) { rtx setter; @@ -2462,51 +2467,53 @@ compute_transp (rtx x, int indx, sbitmap *bmap, int set_p) return; case MEM: - { - bitmap_iterator bi; - unsigned bb_index; - - /* First handle all the blocks with calls. We don't need to - do any list walking for them. */ - EXECUTE_IF_SET_IN_BITMAP (blocks_with_calls, 0, bb_index, bi) - { - if (set_p) - SET_BIT (bmap[bb_index], indx); - else - RESET_BIT (bmap[bb_index], indx); - } + if (! MEM_READONLY_P (x)) + { + bitmap_iterator bi; + unsigned bb_index; - /* Now iterate over the blocks which have memory modifications - but which do not have any calls. */ - EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set, blocks_with_calls, - 0, bb_index, bi) - { - rtx list_entry = canon_modify_mem_list[bb_index]; + /* First handle all the blocks with calls. We don't need to + do any list walking for them. */ + EXECUTE_IF_SET_IN_BITMAP (blocks_with_calls, 0, bb_index, bi) + { + if (set_p) + SET_BIT (bmap[bb_index], indx); + else + RESET_BIT (bmap[bb_index], indx); + } - while (list_entry) + /* Now iterate over the blocks which have memory modifications + but which do not have any calls. */ + EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set, + blocks_with_calls, + 0, bb_index, bi) { - rtx dest, dest_addr; + rtx list_entry = canon_modify_mem_list[bb_index]; - /* LIST_ENTRY must be an INSN of some kind that sets memory. - Examine each hunk of memory that is modified. */ + while (list_entry) + { + rtx dest, dest_addr; - dest = XEXP (list_entry, 0); - list_entry = XEXP (list_entry, 1); - dest_addr = XEXP (list_entry, 0); + /* LIST_ENTRY must be an INSN of some kind that sets memory. + Examine each hunk of memory that is modified. */ - if (canon_true_dependence (dest, GET_MODE (dest), dest_addr, - x, rtx_addr_varies_p)) - { - if (set_p) - SET_BIT (bmap[bb_index], indx); - else - RESET_BIT (bmap[bb_index], indx); - break; - } - list_entry = XEXP (list_entry, 1); + dest = XEXP (list_entry, 0); + list_entry = XEXP (list_entry, 1); + dest_addr = XEXP (list_entry, 0); + + if (canon_true_dependence (dest, GET_MODE (dest), dest_addr, + x, rtx_addr_varies_p)) + { + if (set_p) + SET_BIT (bmap[bb_index], indx); + else + RESET_BIT (bmap[bb_index], indx); + break; + } + list_entry = XEXP (list_entry, 1); + } } - } - } + } x = XEXP (x, 0); goto repeat; |