Commit 6409abe3 by Nathan Froyd Committed by Nathan Froyd

gcse.c (modify_mem_list): Convert to an array of VECs.

	* gcse.c (modify_mem_list): Convert to an array of VECs.
	(canon_modify_mem_list, compute_transp): Tweak formatting.
	(alloc_gcse_mem): Likewise.  Adjust for modify_mem_list change.
	(load_killed_in_block_p): Likewise.
	(record_last_mem_set_info): Likewise.
	(clear_modify_mem_tables): Likewise.

From-SVN: r171992
parent 170d8157
2011-04-05 Nathan Froyd <froydnj@codesourcery.com>
* gcse.c (modify_mem_list): Convert to an array of VECs.
(canon_modify_mem_list, compute_transp): Tweak formatting.
(alloc_gcse_mem): Likewise. Adjust for modify_mem_list change.
(load_killed_in_block_p): Likewise.
(record_last_mem_set_info): Likewise.
(clear_modify_mem_tables): Likewise.
2011-04-05 Tom de Vries <tom@codesourcery.com> 2011-04-05 Tom de Vries <tom@codesourcery.com>
PR middle-end/48461 PR middle-end/48461
......
...@@ -382,7 +382,7 @@ static regset reg_set_bitmap; ...@@ -382,7 +382,7 @@ static regset reg_set_bitmap;
/* Array, indexed by basic block number for a list of insns which modify /* Array, indexed by basic block number for a list of insns which modify
memory within that block. */ memory within that block. */
static rtx * modify_mem_list; static VEC (rtx,heap) **modify_mem_list;
static bitmap modify_mem_list_set; static bitmap modify_mem_list_set;
typedef struct modify_pair_s typedef struct modify_pair_s
...@@ -396,7 +396,7 @@ DEF_VEC_ALLOC_O(modify_pair,heap); ...@@ -396,7 +396,7 @@ DEF_VEC_ALLOC_O(modify_pair,heap);
/* This array parallels modify_mem_list, except that it stores MEMs /* This array parallels modify_mem_list, except that it stores MEMs
being set and their canonicalized memory addresses. */ being set and their canonicalized memory addresses. */
static VEC(modify_pair,heap) **canon_modify_mem_list; static VEC (modify_pair,heap) **canon_modify_mem_list;
/* Bitmap indexed by block numbers to record which blocks contain /* Bitmap indexed by block numbers to record which blocks contain
function calls. */ function calls. */
...@@ -595,8 +595,8 @@ alloc_gcse_mem (void) ...@@ -595,8 +595,8 @@ alloc_gcse_mem (void)
/* Allocate array to keep a list of insns which modify memory in each /* Allocate array to keep a list of insns which modify memory in each
basic block. */ basic block. */
modify_mem_list = GCNEWVEC (rtx, last_basic_block); modify_mem_list = GCNEWVEC (VEC (rtx,heap) *, last_basic_block);
canon_modify_mem_list = GCNEWVEC (VEC(modify_pair,heap) *, canon_modify_mem_list = GCNEWVEC (VEC (modify_pair,heap) *,
last_basic_block); last_basic_block);
modify_mem_list_set = BITMAP_ALLOC (NULL); modify_mem_list_set = BITMAP_ALLOC (NULL);
blocks_with_calls = BITMAP_ALLOC (NULL); blocks_with_calls = BITMAP_ALLOC (NULL);
...@@ -991,26 +991,22 @@ mems_conflict_for_gcse_p (rtx dest, const_rtx setter ATTRIBUTE_UNUSED, ...@@ -991,26 +991,22 @@ mems_conflict_for_gcse_p (rtx dest, const_rtx setter ATTRIBUTE_UNUSED,
static int static int
load_killed_in_block_p (const_basic_block bb, int uid_limit, const_rtx x, int avail_p) load_killed_in_block_p (const_basic_block bb, int uid_limit, const_rtx x, int avail_p)
{ {
rtx list_entry = modify_mem_list[bb->index]; VEC (rtx,heap) *list = modify_mem_list[bb->index];
rtx setter;
unsigned ix;
/* If this is a readonly then we aren't going to be changing it. */ /* If this is a readonly then we aren't going to be changing it. */
if (MEM_READONLY_P (x)) if (MEM_READONLY_P (x))
return 0; return 0;
while (list_entry) FOR_EACH_VEC_ELT_REVERSE (rtx, list, ix, setter)
{ {
rtx setter;
/* Ignore entries in the list that do not apply. */ /* Ignore entries in the list that do not apply. */
if ((avail_p if ((avail_p
&& DF_INSN_LUID (XEXP (list_entry, 0)) < uid_limit) && DF_INSN_LUID (setter) < uid_limit)
|| (! avail_p || (! avail_p
&& DF_INSN_LUID (XEXP (list_entry, 0)) > uid_limit)) && DF_INSN_LUID (setter) > uid_limit))
{ continue;
list_entry = XEXP (list_entry, 1);
continue;
}
setter = XEXP (list_entry, 0);
/* If SETTER is a call everything is clobbered. Note that calls /* If SETTER is a call everything is clobbered. Note that calls
to pure functions are never put on the list, so we need not to pure functions are never put on the list, so we need not
...@@ -1028,7 +1024,6 @@ load_killed_in_block_p (const_basic_block bb, int uid_limit, const_rtx x, int av ...@@ -1028,7 +1024,6 @@ load_killed_in_block_p (const_basic_block bb, int uid_limit, const_rtx x, int av
note_stores (PATTERN (setter), mems_conflict_for_gcse_p, NULL); note_stores (PATTERN (setter), mems_conflict_for_gcse_p, NULL);
if (gcse_mems_conflict_p) if (gcse_mems_conflict_p)
return 1; return 1;
list_entry = XEXP (list_entry, 1);
} }
return 0; return 0;
} }
...@@ -1480,7 +1475,7 @@ record_last_mem_set_info (rtx insn) ...@@ -1480,7 +1475,7 @@ record_last_mem_set_info (rtx insn)
/* load_killed_in_block_p will handle the case of calls clobbering /* load_killed_in_block_p will handle the case of calls clobbering
everything. */ everything. */
modify_mem_list[bb] = alloc_INSN_LIST (insn, modify_mem_list[bb]); VEC_safe_push (rtx, heap, modify_mem_list[bb], insn);
bitmap_set_bit (modify_mem_list_set, bb); bitmap_set_bit (modify_mem_list_set, bb);
if (CALL_P (insn)) if (CALL_P (insn))
...@@ -1621,7 +1616,7 @@ clear_modify_mem_tables (void) ...@@ -1621,7 +1616,7 @@ clear_modify_mem_tables (void)
EXECUTE_IF_SET_IN_BITMAP (modify_mem_list_set, 0, i, bi) EXECUTE_IF_SET_IN_BITMAP (modify_mem_list_set, 0, i, bi)
{ {
free_INSN_LIST_list (modify_mem_list + i); VEC_free (rtx, heap, modify_mem_list[i]);
VEC_free (modify_pair, heap, canon_modify_mem_list[i]); VEC_free (modify_pair, heap, canon_modify_mem_list[i]);
} }
bitmap_clear (modify_mem_list_set); bitmap_clear (modify_mem_list_set);
...@@ -1693,7 +1688,7 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap) ...@@ -1693,7 +1688,7 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap)
blocks_with_calls, blocks_with_calls,
0, bb_index, bi) 0, bb_index, bi)
{ {
VEC(modify_pair,heap) *list VEC (modify_pair,heap) *list
= canon_modify_mem_list[bb_index]; = canon_modify_mem_list[bb_index];
modify_pair *pair; modify_pair *pair;
unsigned ix; unsigned ix;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment