From a2658f4a0820a26c7e82496c7634dd6decce82e1 Mon Sep 17 00:00:00 2001 From: hagog Date: Wed, 1 Jun 2005 05:17:59 +0000 Subject: [PATCH 1/1] 2005-06-01 Mostafa Hagog * gcse.c (compute_transp, load_killed_in_block): Use MEM_READONLY_P. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100425 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 ++++ gcc/gcse.c | 83 ++++++++++++++++++++++++++++++++--------------------------- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 51e096044e6..741ee96a5d3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-06-01 Mostafa Hagog + + * gcse.c (compute_transp, load_killed_in_block): Use + MEM_READONLY_P. + 2005-06-01 David.Billinghurst PR target/21854 diff --git a/gcc/gcse.c b/gcc/gcse.c index 0fe20ab0c75..d29a507d238 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -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; -- 2.11.0