Index: gcc/gcc/dse.c |
diff --git a/gcc/gcc/dse.c b/gcc/gcc/dse.c |
index f7a1cbb007a30dbd086fda5a50a65bb97691fca6..2be8a942c75fe3749bdc7007aae4fb08395beaa0 100644 |
--- a/gcc/gcc/dse.c |
+++ b/gcc/gcc/dse.c |
@@ -1,5 +1,6 @@ |
/* RTL dead store elimination. |
- Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. |
+ Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 |
+ Free Software Foundation, Inc. |
Contributed by Richard Sandiford <rsandifor@codesourcery.com> |
and Kenneth Zadeck <zadeck@naturalbridge.com> |
@@ -48,13 +49,13 @@ along with GCC; see the file COPYING3. If not see |
#include "target.h" |
/* This file contains three techniques for performing Dead Store |
- Elimination (dse). |
+ Elimination (dse). |
* The first technique performs dse locally on any base address. It |
is based on the cselib which is a local value numbering technique. |
This technique is local to a basic block but deals with a fairly |
general addresses. |
- |
+ |
* The second technique performs dse globally but is restricted to |
base addresses that are either constant or are relative to the |
frame_pointer. |
@@ -84,7 +85,7 @@ along with GCC; see the file COPYING3. If not see |
stores, only one store to an address is necessary because those |
stores die at the end of the function. |
- 3) Set up the global dataflow equations based on processing the |
+ 3) Set up the global dataflow equations based on processing the |
info parsed in the first step. |
4) Solve the dataflow equations. |
@@ -138,10 +139,10 @@ along with GCC; see the file COPYING3. If not see |
These are expensive and cumbersome in our bitmap formulation so |
care has been taken to avoid large vectors filled with 1s. See |
the comments in bb_info and in the dataflow confluence functions |
- for details. |
+ for details. |
There are two places for further enhancements to this algorithm: |
- |
+ |
1) The original dse which was embedded in a pass called flow also |
did local address forwarding. For example in |
@@ -183,7 +184,7 @@ along with GCC; see the file COPYING3. If not see |
with the same mode and alias set. The backout in this case is a |
little more graceful than (a). In this case the slot is unmarked |
as being a spill slot and if final address comes out to be based |
- off the frame pointer, the global algorithm handles this slot. |
+ off the frame pointer, the global algorithm handles this slot. |
c) For any pass that may prespill, there is currently no |
mechanism to tell the dse pass that the slot being used has the |
@@ -203,7 +204,7 @@ static bitmap scratch = NULL; |
struct insn_info; |
/* This structure holds information about a candidate store. */ |
-struct store_info |
+struct store_info |
{ |
/* False means this is a clobber. */ |
@@ -216,7 +217,7 @@ struct store_info |
true, this is -1. Otherwise, it is the index into the group |
table. */ |
int group_id; |
- |
+ |
/* This is the cselib value. */ |
cselib_val *cse_base; |
@@ -244,7 +245,7 @@ struct store_info |
{ |
/* A bitmap with one bit per byte. Cleared bit means the position |
is needed. Used if IS_LARGE is false. */ |
- bitmap bitmap; |
+ bitmap bmap; |
/* Number of set bits (i.e. unneeded bytes) in BITMAP. If it is |
equal to END - BEGIN, the whole store is unused. */ |
@@ -285,7 +286,7 @@ static alloc_pool rtx_store_info_pool; |
/* This structure holds information about a load. These are only |
built for rtx bases. */ |
-struct read_info |
+struct read_info |
{ |
/* The id of the mem group of the base address. */ |
int group_id; |
@@ -310,7 +311,7 @@ static alloc_pool read_info_pool; |
/* One of these records is created for each insn. */ |
-struct insn_info |
+struct insn_info |
{ |
/* Set true if the insn contains a store but the insn itself cannot |
be deleted. This is set if the insn is a parallel and there is |
@@ -384,10 +385,10 @@ typedef struct insn_info *insn_info_t; |
static alloc_pool insn_info_pool; |
/* The linked list of stores that are under consideration in this |
- basic block. */ |
+ basic block. */ |
static insn_info_t active_local_stores; |
-struct bb_info |
+struct bb_info |
{ |
/* Pointer to the insn info for the last insn in the block. These |
@@ -410,7 +411,7 @@ struct bb_info |
/* The set of store positions that exist in this block before a wild read. */ |
bitmap gen; |
- |
+ |
/* The set of load positions that exist in this block above the |
same position of a store. */ |
bitmap kill; |
@@ -455,7 +456,7 @@ static bb_info_t *bb_table; |
memory. There are also not many of the rtx bases because they are |
very limited in scope. */ |
-struct group_info |
+struct group_info |
{ |
/* The actual base of the address. */ |
rtx rtx_base; |
@@ -475,7 +476,7 @@ struct group_info |
/* A mem wrapped around the base pointer for the group in order to |
do read dependency. */ |
rtx base_mem; |
- |
+ |
/* Canonized version of base_mem's address. */ |
rtx canon_base_addr; |
@@ -506,8 +507,8 @@ struct group_info |
positions in the global bitmaps. It is only created after all of |
the all of stores have been scanned and we know which ones we |
care about. */ |
- int *offset_map_n, *offset_map_p; |
- int offset_map_size_n, offset_map_size_p; |
+ int *offset_map_n, *offset_map_p; |
+ int offset_map_size_n, offset_map_size_p; |
}; |
typedef struct group_info *group_info_t; |
typedef const struct group_info *const_group_info_t; |
@@ -527,7 +528,7 @@ static VEC(group_info_t,heap) *rtx_group_vec; |
/* This structure holds the set of changes that are being deferred |
when removing read operation. See replace_read. */ |
-struct deferred_change |
+struct deferred_change |
{ |
/* The mem that is being replaced. */ |
@@ -555,7 +556,7 @@ static bitmap clear_alias_sets = NULL; |
/* The set of clear_alias_sets that have been disqualified because |
there are loads or stores using a different mode than the alias set |
- was registered with. */ |
+ was registered with. */ |
static bitmap disqualified_clear_alias_sets = NULL; |
/* The group that holds all of the clear_alias_sets. */ |
@@ -578,10 +579,10 @@ static alloc_pool clear_alias_mode_pool; |
static bool stores_off_frame_dead_at_return; |
/* Counter for stats. */ |
-static int globally_deleted; |
-static int locally_deleted; |
-static int spill_deleted; |
- |
+static int globally_deleted; |
+static int locally_deleted; |
+static int spill_deleted; |
+ |
static bitmap all_blocks; |
/* The number of bits used in the global bitmaps. */ |
@@ -596,7 +597,7 @@ static bool gate_dse2 (void); |
/*---------------------------------------------------------------------------- |
Zeroth step. |
- Initialization. |
+ Initialization. |
----------------------------------------------------------------------------*/ |
/* Hashtable callbacks for maintaining the "bases" field of |
@@ -605,9 +606,9 @@ static bool gate_dse2 (void); |
static int |
clear_alias_mode_eq (const void *p1, const void *p2) |
{ |
- const struct clear_alias_mode_holder * h1 |
+ const struct clear_alias_mode_holder * h1 |
= (const struct clear_alias_mode_holder *) p1; |
- const struct clear_alias_mode_holder * h2 |
+ const struct clear_alias_mode_holder * h2 |
= (const struct clear_alias_mode_holder *) p2; |
return h1->alias_set == h2->alias_set; |
} |
@@ -616,7 +617,7 @@ clear_alias_mode_eq (const void *p1, const void *p2) |
static hashval_t |
clear_alias_mode_hash (const void *p) |
{ |
- const struct clear_alias_mode_holder *holder |
+ const struct clear_alias_mode_holder *holder |
= (const struct clear_alias_mode_holder *) p; |
return holder->alias_set; |
} |
@@ -629,11 +630,11 @@ clear_alias_set_lookup (alias_set_type alias_set) |
{ |
struct clear_alias_mode_holder tmp_holder; |
void **slot; |
- |
+ |
tmp_holder.alias_set = alias_set; |
slot = htab_find_slot (clear_alias_mode_table, &tmp_holder, NO_INSERT); |
gcc_assert (*slot); |
- |
+ |
return (struct clear_alias_mode_holder *) *slot; |
} |
@@ -664,8 +665,8 @@ invariant_group_base_hash (const void *p) |
static group_info_t |
get_group_info (rtx base) |
{ |
- struct group_info tmp_gi; |
- group_info_t gi; |
+ struct group_info tmp_gi; |
+ group_info_t gi; |
void **slot; |
if (base) |
@@ -712,7 +713,7 @@ get_group_info (rtx base) |
gi->store2_p = BITMAP_ALLOC (NULL); |
gi->group_kill = BITMAP_ALLOC (NULL); |
gi->process_globally = false; |
- gi->frame_related = |
+ gi->frame_related = |
(base == frame_pointer_rtx) || (base == hard_frame_pointer_rtx); |
gi->offset_map_size_n = 0; |
gi->offset_map_size_p = 0; |
@@ -737,22 +738,22 @@ dse_step0 (void) |
scratch = BITMAP_ALLOC (NULL); |
rtx_store_info_pool |
- = create_alloc_pool ("rtx_store_info_pool", |
+ = create_alloc_pool ("rtx_store_info_pool", |
sizeof (struct store_info), 100); |
read_info_pool |
- = create_alloc_pool ("read_info_pool", |
+ = create_alloc_pool ("read_info_pool", |
sizeof (struct read_info), 100); |
insn_info_pool |
- = create_alloc_pool ("insn_info_pool", |
+ = create_alloc_pool ("insn_info_pool", |
sizeof (struct insn_info), 100); |
bb_info_pool |
- = create_alloc_pool ("bb_info_pool", |
+ = create_alloc_pool ("bb_info_pool", |
sizeof (struct bb_info), 100); |
rtx_group_info_pool |
- = create_alloc_pool ("rtx_group_info_pool", |
+ = create_alloc_pool ("rtx_group_info_pool", |
sizeof (struct group_info), 100); |
deferred_change_pool |
- = create_alloc_pool ("deferred_change_pool", |
+ = create_alloc_pool ("deferred_change_pool", |
sizeof (struct deferred_change), 10); |
rtx_group_table = htab_create (11, invariant_group_base_hash, |
@@ -764,7 +765,7 @@ dse_step0 (void) |
stores_off_frame_dead_at_return = !cfun->stdarg; |
init_alias_analysis (); |
- |
+ |
if (clear_alias_sets) |
clear_alias_group = get_group_info (NULL); |
else |
@@ -783,7 +784,7 @@ dse_step0 (void) |
/* Delete all of the store_info recs from INSN_INFO. */ |
-static void |
+static void |
free_store_info (insn_info_t insn_info) |
{ |
store_info_t store_info = insn_info->store_rec; |
@@ -791,7 +792,7 @@ free_store_info (insn_info_t insn_info) |
{ |
store_info_t next = store_info->next; |
if (store_info->is_large) |
- BITMAP_FREE (store_info->positions_needed.large.bitmap); |
+ BITMAP_FREE (store_info->positions_needed.large.bmap); |
if (store_info->cse_base) |
pool_free (cse_store_info_pool, store_info); |
else |
@@ -826,24 +827,24 @@ replace_inc_dec (rtx *r, void *d) |
case POST_INC: |
{ |
rtx r1 = XEXP (x, 0); |
- rtx c = gen_int_mode (Pmode, data->size); |
- emit_insn_before (gen_rtx_SET (Pmode, r1, |
- gen_rtx_PLUS (Pmode, r1, c)), |
+ rtx c = gen_int_mode (data->size, GET_MODE (r1)); |
+ emit_insn_before (gen_rtx_SET (VOIDmode, r1, |
+ gen_rtx_PLUS (GET_MODE (r1), r1, c)), |
data->insn); |
return -1; |
} |
- |
+ |
case PRE_DEC: |
case POST_DEC: |
{ |
rtx r1 = XEXP (x, 0); |
- rtx c = gen_int_mode (Pmode, -data->size); |
- emit_insn_before (gen_rtx_SET (Pmode, r1, |
- gen_rtx_PLUS (Pmode, r1, c)), |
+ rtx c = gen_int_mode (-data->size, GET_MODE (r1)); |
+ emit_insn_before (gen_rtx_SET (VOIDmode, r1, |
+ gen_rtx_PLUS (GET_MODE (r1), r1, c)), |
data->insn); |
return -1; |
} |
- |
+ |
case PRE_MODIFY: |
case POST_MODIFY: |
{ |
@@ -851,7 +852,7 @@ replace_inc_dec (rtx *r, void *d) |
insn that contained it. */ |
rtx add = XEXP (x, 0); |
rtx r1 = XEXP (add, 0); |
- emit_insn_before (gen_rtx_SET (Pmode, r1, add), data->insn); |
+ emit_insn_before (gen_rtx_SET (VOIDmode, r1, add), data->insn); |
return -1; |
} |
@@ -859,7 +860,7 @@ replace_inc_dec (rtx *r, void *d) |
return 0; |
} |
} |
- |
+ |
/* If X is a MEM, check the address to see if it is PRE/POST-INC/DEC/MODIFY |
and generate an add to replace that. */ |
@@ -876,7 +877,7 @@ replace_inc_dec_mem (rtx *r, void *d) |
data.insn = (rtx) d; |
for_each_rtx (&XEXP (x, 0), replace_inc_dec, &data); |
- |
+ |
return -1; |
} |
return 0; |
@@ -894,7 +895,7 @@ check_for_inc_dec (rtx insn) |
} |
-/* Delete the insn and free all of the fields inside INSN_INFO. */ |
+/* Delete the insn and free all of the fields inside INSN_INFO. */ |
static void |
delete_dead_store_insn (insn_info_t insn_info) |
@@ -907,10 +908,10 @@ delete_dead_store_insn (insn_info_t insn_info) |
check_for_inc_dec (insn_info->insn); |
if (dump_file) |
{ |
- fprintf (dump_file, "Locally deleting insn %d ", |
+ fprintf (dump_file, "Locally deleting insn %d ", |
INSN_UID (insn_info->insn)); |
if (insn_info->store_rec->alias_set) |
- fprintf (dump_file, "alias set %d\n", |
+ fprintf (dump_file, "alias set %d\n", |
(int) insn_info->store_rec->alias_set); |
else |
fprintf (dump_file, "\n"); |
@@ -918,7 +919,7 @@ delete_dead_store_insn (insn_info_t insn_info) |
free_store_info (insn_info); |
read_info = insn_info->read_rec; |
- |
+ |
while (read_info) |
{ |
read_info_t next = read_info->next; |
@@ -961,10 +962,10 @@ set_usage_bits (group_info_t group, HOST_WIDE_INT offset, HOST_WIDE_INT width) |
store2 = group->store2_p; |
ai = i; |
} |
- |
+ |
if (bitmap_bit_p (store1, ai)) |
bitmap_set_bit (store2, ai); |
- else |
+ else |
{ |
bitmap_set_bit (store1, ai); |
if (i < 0) |
@@ -998,7 +999,7 @@ add_wild_read (bb_info_t bb_info) |
pool_free (read_info_pool, *ptr); |
*ptr = next; |
} |
- else |
+ else |
ptr = &(*ptr)->next; |
} |
insn_info->wild_read = true; |
@@ -1015,9 +1016,6 @@ const_or_frame_p (rtx x) |
{ |
switch (GET_CODE (x)) |
{ |
- case MEM: |
- return MEM_READONLY_P (x); |
- |
case CONST: |
case CONST_INT: |
case CONST_DOUBLE: |
@@ -1043,8 +1041,8 @@ const_or_frame_p (rtx x) |
} |
} |
-/* Take all reasonable action to put the address of MEM into the form |
- that we can do analysis on. |
+/* Take all reasonable action to put the address of MEM into the form |
+ that we can do analysis on. |
The gold standard is to get the address into the form: address + |
OFFSET where address is something that rtx_varies_p considers a |
@@ -1054,8 +1052,8 @@ const_or_frame_p (rtx x) |
obtained from that. |
If that fails, we try cselib to get a value we can at least use |
- locally. If that fails we return false. |
- |
+ locally. If that fails we return false. |
+ |
The GROUP_ID is set to -1 for cselib bases and the index of the |
group for non_varying bases. |
@@ -1065,9 +1063,11 @@ static bool |
canon_address (rtx mem, |
alias_set_type *alias_set_out, |
int *group_id, |
- HOST_WIDE_INT *offset, |
+ HOST_WIDE_INT *offset, |
cselib_val **base) |
{ |
+ enum machine_mode address_mode |
+ = targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem)); |
rtx mem_address = XEXP (mem, 0); |
rtx expanded_address, address; |
int expanded; |
@@ -1083,18 +1083,18 @@ canon_address (rtx mem, |
fprintf (dump_file, "found alias set %d\n", (int) alias_set); |
if (bitmap_bit_p (clear_alias_sets, alias_set)) |
{ |
- struct clear_alias_mode_holder *entry |
+ struct clear_alias_mode_holder *entry |
= clear_alias_set_lookup (alias_set); |
/* If the modes do not match, we cannot process this set. */ |
if (entry->mode != GET_MODE (mem)) |
{ |
if (dump_file) |
- fprintf (dump_file, |
- "disqualifying alias set %d, (%s) != (%s)\n", |
- (int) alias_set, GET_MODE_NAME (entry->mode), |
+ fprintf (dump_file, |
+ "disqualifying alias set %d, (%s) != (%s)\n", |
+ (int) alias_set, GET_MODE_NAME (entry->mode), |
GET_MODE_NAME (GET_MODE (mem))); |
- |
+ |
bitmap_set_bit (disqualified_clear_alias_sets, alias_set); |
return false; |
} |
@@ -1107,7 +1107,7 @@ canon_address (rtx mem, |
*alias_set_out = 0; |
- cselib_lookup (mem_address, Pmode, 1); |
+ cselib_lookup (mem_address, address_mode, 1); |
if (dump_file) |
{ |
@@ -1124,12 +1124,12 @@ canon_address (rtx mem, |
if (expanded) |
{ |
/* Use cselib to replace all of the reg references with the full |
- expression. This will take care of the case where we have |
+ expression. This will take care of the case where we have |
r_x = base + offset; |
val = *r_x; |
- |
- by making it into |
+ |
+ by making it into |
val = *(base + offset); */ |
@@ -1167,13 +1167,14 @@ canon_address (rtx mem, |
address = XEXP (address, 0); |
if (GET_CODE (address) == PLUS |
- && GET_CODE (XEXP (address, 1)) == CONST_INT) |
+ && CONST_INT_P (XEXP (address, 1))) |
{ |
*offset = INTVAL (XEXP (address, 1)); |
address = XEXP (address, 0); |
} |
- if (const_or_frame_p (address)) |
+ if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (mem)) |
+ && const_or_frame_p (address)) |
{ |
group_info_t group = get_group_info (address); |
@@ -1186,7 +1187,7 @@ canon_address (rtx mem, |
} |
} |
- *base = cselib_lookup (address, Pmode, true); |
+ *base = cselib_lookup (address, address_mode, true); |
*group_id = -1; |
if (*base == NULL) |
@@ -1196,8 +1197,8 @@ canon_address (rtx mem, |
return false; |
} |
if (dump_file) |
- fprintf (dump_file, " varying cselib base=%d offset = %d\n", |
- (*base)->value, (int)*offset); |
+ fprintf (dump_file, " varying cselib base=%u:%u offset = %d\n", |
+ (*base)->uid, (*base)->hash, (int)*offset); |
return true; |
} |
@@ -1231,10 +1232,10 @@ set_position_unneeded (store_info_t s_info, int pos) |
{ |
if (__builtin_expect (s_info->is_large, false)) |
{ |
- if (!bitmap_bit_p (s_info->positions_needed.large.bitmap, pos)) |
+ if (!bitmap_bit_p (s_info->positions_needed.large.bmap, pos)) |
{ |
s_info->positions_needed.large.count++; |
- bitmap_set_bit (s_info->positions_needed.large.bitmap, pos); |
+ bitmap_set_bit (s_info->positions_needed.large.bmap, pos); |
} |
} |
else |
@@ -1251,7 +1252,7 @@ set_all_positions_unneeded (store_info_t s_info) |
{ |
int pos, end = s_info->end - s_info->begin; |
for (pos = 0; pos < end; pos++) |
- bitmap_set_bit (s_info->positions_needed.large.bitmap, pos); |
+ bitmap_set_bit (s_info->positions_needed.large.bmap, pos); |
s_info->positions_needed.large.count = end; |
} |
else |
@@ -1281,7 +1282,7 @@ all_positions_needed_p (store_info_t s_info, int start, int width) |
{ |
int end = start + width; |
while (start < end) |
- if (bitmap_bit_p (s_info->positions_needed.large.bitmap, start++)) |
+ if (bitmap_bit_p (s_info->positions_needed.large.bmap, start++)) |
return false; |
return true; |
} |
@@ -1341,7 +1342,7 @@ record_store (rtx body, bb_info_t bb_info) |
{ |
if (GET_CODE (XEXP (mem, 0)) == SCRATCH) |
{ |
- if (dump_file) |
+ if (dump_file) |
fprintf (dump_file, " adding wild read for (clobber (mem:BLK (scratch))\n"); |
add_wild_read (bb_info); |
insn_info->cannot_delete = true; |
@@ -1391,15 +1392,15 @@ record_store (rtx body, bb_info_t bb_info) |
bitmap store2 = clear_alias_group->store2_p; |
gcc_assert (GET_MODE (mem) != BLKmode); |
- |
+ |
if (bitmap_bit_p (store1, spill_alias_set)) |
bitmap_set_bit (store2, spill_alias_set); |
- else |
+ else |
bitmap_set_bit (store1, spill_alias_set); |
- |
+ |
if (clear_alias_group->offset_map_size_p < spill_alias_set) |
clear_alias_group->offset_map_size_p = spill_alias_set; |
- |
+ |
store_info = (store_info_t) pool_alloc (rtx_store_info_pool); |
if (dump_file) |
@@ -1410,10 +1411,10 @@ record_store (rtx body, bb_info_t bb_info) |
{ |
/* In the restrictive case where the base is a constant or the |
frame pointer we can do global analysis. */ |
- |
- group_info_t group |
+ |
+ group_info_t group |
= VEC_index (group_info_t, rtx_group_vec, group_id); |
- |
+ |
store_info = (store_info_t) pool_alloc (rtx_store_info_pool); |
set_usage_bits (group, offset, width); |
@@ -1508,7 +1509,7 @@ record_store (rtx body, bb_info_t bb_info) |
del = false; |
else if (s_info->alias_set) |
{ |
- struct clear_alias_mode_holder *entry |
+ struct clear_alias_mode_holder *entry |
= clear_alias_set_lookup (s_info->alias_set); |
/* Generally, spills cannot be processed if and of the |
references to the slot have a different mode. But if |
@@ -1525,13 +1526,13 @@ record_store (rtx body, bb_info_t bb_info) |
fprintf (dump_file, " trying spill store in insn=%d alias_set=%d\n", |
INSN_UID (ptr->insn), (int) s_info->alias_set); |
} |
- else if ((s_info->group_id == group_id) |
+ else if ((s_info->group_id == group_id) |
&& (s_info->cse_base == base)) |
{ |
HOST_WIDE_INT i; |
if (dump_file) |
fprintf (dump_file, " trying store in insn=%d gid=%d[%d..%d)\n", |
- INSN_UID (ptr->insn), s_info->group_id, |
+ INSN_UID (ptr->insn), s_info->group_id, |
(int)s_info->begin, (int)s_info->end); |
/* Even if PTR won't be eliminated as unneeded, if both |
@@ -1579,7 +1580,7 @@ record_store (rtx body, bb_info_t bb_info) |
the value of store_info. If it is, set the rhs to NULL to |
keep it from being used to remove a load. */ |
{ |
- if (canon_true_dependence (s_info->mem, |
+ if (canon_true_dependence (s_info->mem, |
GET_MODE (s_info->mem), |
s_info->mem_addr, |
mem, mem_addr, rtx_varies_p)) |
@@ -1598,20 +1599,20 @@ record_store (rtx body, bb_info_t bb_info) |
if (del) |
{ |
insn_info_t insn_to_delete = ptr; |
- |
+ |
if (last) |
last->next_local_store = ptr->next_local_store; |
else |
active_local_stores = ptr->next_local_store; |
- |
+ |
delete_dead_store_insn (insn_to_delete); |
} |
else |
last = ptr; |
- |
+ |
ptr = next; |
} |
- |
+ |
/* Finish filling in the store_info. */ |
store_info->next = insn_info->store_rec; |
insn_info->store_rec = store_info; |
@@ -1623,7 +1624,7 @@ record_store (rtx body, bb_info_t bb_info) |
{ |
store_info->is_large = true; |
store_info->positions_needed.large.count = 0; |
- store_info->positions_needed.large.bitmap = BITMAP_ALLOC (NULL); |
+ store_info->positions_needed.large.bmap = BITMAP_ALLOC (NULL); |
} |
else |
{ |
@@ -1648,7 +1649,7 @@ record_store (rtx body, bb_info_t bb_info) |
static void |
dump_insn_info (const char * start, insn_info_t insn_info) |
{ |
- fprintf (dump_file, "%s insn=%d %s\n", start, |
+ fprintf (dump_file, "%s insn=%d %s\n", start, |
INSN_UID (insn_info->insn), |
insn_info->store_rec ? "has store" : "naked"); |
} |
@@ -1873,7 +1874,7 @@ get_stored_val (store_info_t store_info, enum machine_mode read_mode, |
... |
... <- A |
- and change it into |
+ and change it into |
r2 <- r1 |
A <- r1 |
... |
@@ -1900,7 +1901,7 @@ get_stored_val (store_info_t store_info, enum machine_mode read_mode, |
went ok. */ |
static bool |
-replace_read (store_info_t store_info, insn_info_t store_insn, |
+replace_read (store_info_t store_info, insn_info_t store_insn, |
read_info_t read_info, insn_info_t read_insn, rtx *loc, |
bitmap regs_live) |
{ |
@@ -1955,17 +1956,17 @@ replace_read (store_info_t store_info, insn_info_t store_insn, |
for (this_insn = insns; this_insn != NULL_RTX; this_insn = NEXT_INSN (this_insn)) |
note_stores (PATTERN (this_insn), look_for_hardregs, regs_set); |
- |
+ |
bitmap_and_into (regs_set, regs_live); |
if (!bitmap_empty_p (regs_set)) |
{ |
if (dump_file) |
{ |
- fprintf (dump_file, |
+ fprintf (dump_file, |
"abandoning replacement because sequence clobbers live hardregs:"); |
df_print_regset (dump_file, regs_set); |
} |
- |
+ |
BITMAP_FREE (regs_set); |
return false; |
} |
@@ -1976,25 +1977,25 @@ replace_read (store_info_t store_info, insn_info_t store_insn, |
{ |
deferred_change_t deferred_change = |
(deferred_change_t) pool_alloc (deferred_change_pool); |
- |
+ |
/* Insert this right before the store insn where it will be safe |
from later insns that might change it before the read. */ |
emit_insn_before (insns, store_insn->insn); |
- |
+ |
/* And now for the kludge part: cselib croaks if you just |
return at this point. There are two reasons for this: |
- |
+ |
1) Cselib has an idea of how many pseudos there are and |
that does not include the new ones we just added. |
- |
+ |
2) Cselib does not know about the move insn we added |
above the store_info, and there is no way to tell it |
about it, because it has "moved on". |
- |
+ |
Problem (1) is fixable with a certain amount of engineering. |
Problem (2) is requires starting the bb from scratch. This |
could be expensive. |
- |
+ |
So we are just going to have to lie. The move/extraction |
insns are not really an issue, cselib did not see them. But |
the use of the new pseudo read_insn is a real problem because |
@@ -2003,13 +2004,13 @@ replace_read (store_info_t store_info, insn_info_t store_insn, |
and when we are finished with the block, we undo this. We |
keep a table of mems to get rid of. At the end of the basic |
block we can put them back. */ |
- |
+ |
*loc = read_info->mem; |
deferred_change->next = deferred_change_list; |
deferred_change_list = deferred_change; |
deferred_change->loc = loc; |
deferred_change->reg = read_reg; |
- |
+ |
/* Get rid of the read_info, from the point of view of the |
rest of dse, play like this read never happened. */ |
read_insn->read_rec = read_info->next; |
@@ -2022,7 +2023,7 @@ replace_read (store_info_t store_info, insn_info_t store_insn, |
} |
return true; |
} |
- else |
+ else |
{ |
if (dump_file) |
{ |
@@ -2047,7 +2048,7 @@ check_mem_read_rtx (rtx *loc, void *data) |
HOST_WIDE_INT offset = 0; |
HOST_WIDE_INT width = 0; |
alias_set_type spill_alias_set = 0; |
- cselib_val *base = NULL; |
+ cselib_val *base = NULL; |
int group_id; |
read_info_t read_info; |
@@ -2129,7 +2130,7 @@ check_mem_read_rtx (rtx *loc, void *data) |
/* Skip the clobbers. */ |
while (!store_info->is_set) |
store_info = store_info->next; |
- |
+ |
if (store_info->alias_set == spill_alias_set) |
{ |
if (dump_file) |
@@ -2151,7 +2152,7 @@ check_mem_read_rtx (rtx *loc, void *data) |
the frame pointer and offset is a constant. */ |
insn_info_t i_ptr = active_local_stores; |
insn_info_t last = NULL; |
- |
+ |
if (dump_file) |
{ |
if (width == -1) |
@@ -2166,35 +2167,35 @@ check_mem_read_rtx (rtx *loc, void *data) |
{ |
bool remove = false; |
store_info_t store_info = i_ptr->store_rec; |
- |
+ |
/* Skip the clobbers. */ |
while (!store_info->is_set) |
store_info = store_info->next; |
- |
+ |
/* There are three cases here. */ |
if (store_info->group_id < 0) |
/* We have a cselib store followed by a read from a |
const base. */ |
- remove |
- = canon_true_dependence (store_info->mem, |
+ remove |
+ = canon_true_dependence (store_info->mem, |
GET_MODE (store_info->mem), |
store_info->mem_addr, |
mem, mem_addr, rtx_varies_p); |
- |
+ |
else if (group_id == store_info->group_id) |
{ |
/* This is a block mode load. We may get lucky and |
canon_true_dependence may save the day. */ |
if (width == -1) |
- remove |
- = canon_true_dependence (store_info->mem, |
+ remove |
+ = canon_true_dependence (store_info->mem, |
GET_MODE (store_info->mem), |
store_info->mem_addr, |
mem, mem_addr, rtx_varies_p); |
- |
+ |
/* If this read is just reading back something that we just |
stored, rewrite the read. */ |
- else |
+ else |
{ |
if (store_info->rhs |
&& offset >= store_info->begin |
@@ -2208,17 +2209,17 @@ check_mem_read_rtx (rtx *loc, void *data) |
/* The bases are the same, just see if the offsets |
overlap. */ |
- if ((offset < store_info->end) |
+ if ((offset < store_info->end) |
&& (offset + width > store_info->begin)) |
remove = true; |
} |
} |
- |
- /* else |
+ |
+ /* else |
The else case that is missing here is that the |
bases are constant but different. There is nothing |
to do here because there is no overlap. */ |
- |
+ |
if (remove) |
{ |
if (dump_file) |
@@ -2234,7 +2235,7 @@ check_mem_read_rtx (rtx *loc, void *data) |
i_ptr = i_ptr->next_local_store; |
} |
} |
- else |
+ else |
{ |
insn_info_t i_ptr = active_local_stores; |
insn_info_t last = NULL; |
@@ -2249,7 +2250,7 @@ check_mem_read_rtx (rtx *loc, void *data) |
{ |
bool remove = false; |
store_info_t store_info = i_ptr->store_rec; |
- |
+ |
if (dump_file) |
fprintf (dump_file, " processing cselib load against insn %d\n", |
INSN_UID (i_ptr->insn)); |
@@ -2273,16 +2274,16 @@ check_mem_read_rtx (rtx *loc, void *data) |
return 0; |
if (!store_info->alias_set) |
- remove = canon_true_dependence (store_info->mem, |
+ remove = canon_true_dependence (store_info->mem, |
GET_MODE (store_info->mem), |
store_info->mem_addr, |
mem, mem_addr, rtx_varies_p); |
- |
+ |
if (remove) |
{ |
if (dump_file) |
dump_insn_info ("removing from active", i_ptr); |
- |
+ |
if (last) |
last->next_local_store = i_ptr->next_local_store; |
else |
@@ -2296,7 +2297,7 @@ check_mem_read_rtx (rtx *loc, void *data) |
return 0; |
} |
-/* A for_each_rtx callback in which DATA points the INSN_INFO for |
+/* A for_each_rtx callback in which DATA points the INSN_INFO for |
as check_mem_read_rtx. Nullify the pointer if i_m_r_m_r returns |
true for any part of *LOC. */ |
@@ -2386,7 +2387,12 @@ scan_insn (bb_info_t bb_info, rtx insn) |
insn_info->prev_insn = bb_info->last_insn; |
insn_info->insn = insn; |
bb_info->last_insn = insn_info; |
- |
+ |
+ if (DEBUG_INSN_P (insn)) |
+ { |
+ insn_info->cannot_delete = true; |
+ return; |
+ } |
/* Cselib clears the table for this case, so we have to essentially |
do the same. */ |
@@ -2480,7 +2486,7 @@ scan_insn (bb_info_t bb_info, rtx insn) |
{ |
if (dump_file) |
dump_insn_info ("removing from active", i_ptr); |
- |
+ |
if (last) |
last->next_local_store = i_ptr->next_local_store; |
else |
@@ -2526,11 +2532,11 @@ scan_insn (bb_info_t bb_info, rtx insn) |
them. */ |
if ((GET_CODE (PATTERN (insn)) == CLOBBER) |
|| volatile_refs_p (PATTERN (insn)) |
- || (flag_non_call_exceptions && may_trap_p (PATTERN (insn))) |
+ || insn_could_throw_p (insn) |
|| (RTX_FRAME_RELATED_P (insn)) |
|| find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX)) |
insn_info->cannot_delete = true; |
- |
+ |
body = PATTERN (insn); |
if (GET_CODE (body) == PARALLEL) |
{ |
@@ -2542,7 +2548,7 @@ scan_insn (bb_info_t bb_info, rtx insn) |
mems_found += record_store (body, bb_info); |
if (dump_file) |
- fprintf (dump_file, "mems_found = %d, cannot_delete = %s\n", |
+ fprintf (dump_file, "mems_found = %d, cannot_delete = %s\n", |
mems_found, insn_info->cannot_delete ? "true" : "false"); |
/* If we found some sets of mems, add it into the active_local_stores so |
@@ -2578,7 +2584,7 @@ remove_useless_values (cselib_val *base) |
being deleted, then the insn can not be deleted. */ |
while (store_info) |
{ |
- if ((store_info->group_id == -1) |
+ if ((store_info->group_id == -1) |
&& (store_info->cse_base == base)) |
{ |
del = true; |
@@ -2597,7 +2603,7 @@ remove_useless_values (cselib_val *base) |
} |
else |
last = insn_info; |
- |
+ |
insn_info = insn_info->next_local_store; |
} |
} |
@@ -2610,8 +2616,8 @@ dse_step1 (void) |
{ |
basic_block bb; |
bitmap regs_live = BITMAP_ALLOC (NULL); |
- |
- cselib_init (false); |
+ |
+ cselib_init (0); |
all_blocks = BITMAP_ALLOC (NULL); |
bitmap_set_bit (all_blocks, ENTRY_BLOCK); |
bitmap_set_bit (all_blocks, EXIT_BLOCK); |
@@ -2636,11 +2642,11 @@ dse_step1 (void) |
rtx insn; |
cse_store_info_pool |
- = create_alloc_pool ("cse_store_info_pool", |
+ = create_alloc_pool ("cse_store_info_pool", |
sizeof (struct store_info), 100); |
active_local_stores = NULL; |
cselib_clear_table (); |
- |
+ |
/* Scan the insns. */ |
FOR_BB_INSNS (bb, insn) |
{ |
@@ -2650,7 +2656,7 @@ dse_step1 (void) |
if (INSN_P (insn)) |
df_simulate_one_insn_forwards (bb, insn, regs_live); |
} |
- |
+ |
/* This is something of a hack, because the global algorithm |
is supposed to take care of the case where stores go dead |
at the end of the function. However, the global |
@@ -2676,10 +2682,10 @@ dse_step1 (void) |
store_info = store_info->next; |
if (store_info->alias_set && !i_ptr->cannot_delete) |
delete_dead_store_insn (i_ptr); |
- else |
+ else |
if (store_info->group_id >= 0) |
{ |
- group_info_t group |
+ group_info_t group |
= VEC_index (group_info_t, rtx_group_vec, store_info->group_id); |
if (group->frame_related && !i_ptr->cannot_delete) |
delete_dead_store_insn (i_ptr); |
@@ -2739,7 +2745,7 @@ dse_step1 (void) |
for (s_info = ptr->store_rec; s_info; s_info = s_info->next) |
if (s_info->is_large) |
{ |
- BITMAP_FREE (s_info->positions_needed.large.bitmap); |
+ BITMAP_FREE (s_info->positions_needed.large.bmap); |
s_info->is_large = false; |
} |
} |
@@ -2781,7 +2787,7 @@ dse_step2_init (void) |
for the position. We do this because the stack related |
stores can be deleted if their is no read between them and |
the end of the function. |
- |
+ |
To make this work in the current framework, we take the stack |
related bases add all of the bits from store1 into store2. |
This has the effect of making the eligible even if there is |
@@ -2792,7 +2798,7 @@ dse_step2_init (void) |
bitmap_ior_into (group->store2_n, group->store1_n); |
bitmap_ior_into (group->store2_p, group->store1_p); |
if (dump_file) |
- fprintf (dump_file, "group %d is frame related ", i); |
+ fprintf (dump_file, "group %d is frame related ", i); |
} |
group->offset_map_size_n++; |
@@ -2802,7 +2808,7 @@ dse_step2_init (void) |
group->process_globally = false; |
if (dump_file) |
{ |
- fprintf (dump_file, "group %d(%d+%d): ", i, |
+ fprintf (dump_file, "group %d(%d+%d): ", i, |
(int)bitmap_count_bits (group->store2_n), |
(int)bitmap_count_bits (group->store2_p)); |
bitmap_print (dump_file, group->store2_n, "n ", " "); |
@@ -2843,7 +2849,7 @@ dse_step2_nospill (void) |
} |
EXECUTE_IF_SET_IN_BITMAP (group->store2_p, 0, j, bi) |
{ |
- bitmap_set_bit (group->group_kill, current_position); |
+ bitmap_set_bit (group->group_kill, current_position); |
group->offset_map_p[j] = current_position++; |
group->process_globally = true; |
} |
@@ -2867,24 +2873,24 @@ dse_step2_spill (void) |
if (dump_file) |
{ |
- bitmap_print (dump_file, clear_alias_sets, |
+ bitmap_print (dump_file, clear_alias_sets, |
"clear alias sets ", "\n"); |
- bitmap_print (dump_file, disqualified_clear_alias_sets, |
+ bitmap_print (dump_file, disqualified_clear_alias_sets, |
"disqualified clear alias sets ", "\n"); |
} |
memset (group->offset_map_n, 0, sizeof(int) * group->offset_map_size_n); |
memset (group->offset_map_p, 0, sizeof(int) * group->offset_map_size_p); |
bitmap_clear (group->group_kill); |
- |
+ |
/* Remove the disqualified positions from the store2_p set. */ |
bitmap_and_compl_into (group->store2_p, disqualified_clear_alias_sets); |
- |
+ |
/* We do not need to process the store2_n set because |
alias_sets are always positive. */ |
EXECUTE_IF_SET_IN_BITMAP (group->store2_p, 0, j, bi) |
{ |
- bitmap_set_bit (group->group_kill, current_position); |
+ bitmap_set_bit (group->group_kill, current_position); |
group->offset_map_p[j] = current_position++; |
group->process_globally = true; |
} |
@@ -2896,25 +2902,25 @@ dse_step2_spill (void) |
/*---------------------------------------------------------------------------- |
Third step. |
- |
+ |
Build the bit vectors for the transfer functions. |
----------------------------------------------------------------------------*/ |
/* Note that this is NOT a general purpose function. Any mem that has |
an alias set registered here expected to be COMPLETELY unaliased: |
- i.e it's addresses are not and need not be examined. |
+ i.e it's addresses are not and need not be examined. |
It is known that all references to this address will have this |
alias set and there are NO other references to this address in the |
- function. |
+ function. |
Currently the only place that is known to be clean enough to use |
- this interface is the code that assigns the spill locations. |
+ this interface is the code that assigns the spill locations. |
All of the mems that have alias_sets registered are subjected to a |
very powerful form of dse where function calls, volatile reads and |
- writes, and reads from random location are not taken into account. |
+ writes, and reads from random location are not taken into account. |
It is also assumed that these locations go dead when the function |
returns. This assumption could be relaxed if there were found to |
@@ -2931,8 +2937,8 @@ dse_step2_spill (void) |
elements. So when we see a mode mismatch, we just bail. */ |
-void |
-dse_record_singleton_alias_set (alias_set_type alias_set, |
+void |
+dse_record_singleton_alias_set (alias_set_type alias_set, |
enum machine_mode mode) |
{ |
struct clear_alias_mode_holder tmp_holder; |
@@ -2950,7 +2956,7 @@ dse_record_singleton_alias_set (alias_set_type alias_set, |
disqualified_clear_alias_sets = BITMAP_ALLOC (NULL); |
clear_alias_mode_table = htab_create (11, clear_alias_mode_hash, |
clear_alias_mode_eq, NULL); |
- clear_alias_mode_pool = create_alloc_pool ("clear_alias_mode_pool", |
+ clear_alias_mode_pool = create_alloc_pool ("clear_alias_mode_pool", |
sizeof (struct clear_alias_mode_holder), 100); |
} |
@@ -2970,7 +2976,7 @@ dse_record_singleton_alias_set (alias_set_type alias_set, |
/* Remove ALIAS_SET from the sets of stack slots being considered. */ |
-void |
+void |
dse_invalidate_singleton_alias_set (alias_set_type alias_set) |
{ |
if ((!gate_dse()) || !alias_set) |
@@ -3005,13 +3011,13 @@ get_bitmap_index (group_info_t group_info, HOST_WIDE_INT offset) |
/* Process the STORE_INFOs into the bitmaps into GEN and KILL. KILL |
may be NULL. */ |
-static void |
+static void |
scan_stores_nospill (store_info_t store_info, bitmap gen, bitmap kill) |
{ |
while (store_info) |
{ |
HOST_WIDE_INT i; |
- group_info_t group_info |
+ group_info_t group_info |
= VEC_index (group_info_t, rtx_group_vec, store_info->group_id); |
if (group_info->process_globally) |
for (i = store_info->begin; i < store_info->end; i++) |
@@ -3032,14 +3038,14 @@ scan_stores_nospill (store_info_t store_info, bitmap gen, bitmap kill) |
/* Process the STORE_INFOs into the bitmaps into GEN and KILL. KILL |
may be NULL. */ |
-static void |
+static void |
scan_stores_spill (store_info_t store_info, bitmap gen, bitmap kill) |
{ |
while (store_info) |
{ |
if (store_info->alias_set) |
{ |
- int index = get_bitmap_index (clear_alias_group, |
+ int index = get_bitmap_index (clear_alias_group, |
store_info->alias_set); |
if (index != 0) |
{ |
@@ -3071,7 +3077,7 @@ scan_reads_nospill (insn_info_t insn_info, bitmap gen, bitmap kill) |
{ |
if (kill) |
bitmap_ior_into (kill, group->group_kill); |
- bitmap_and_compl_into (gen, group->group_kill); |
+ bitmap_and_compl_into (gen, group->group_kill); |
} |
} |
@@ -3116,7 +3122,7 @@ scan_reads_nospill (insn_info_t insn_info, bitmap gen, bitmap kill) |
something else with a different constant |
base. */ |
if ((read_info->group_id < 0) |
- && canon_true_dependence (group->base_mem, |
+ && canon_true_dependence (group->base_mem, |
QImode, |
group->canon_base_addr, |
read_info->mem, NULL_RTX, |
@@ -3129,7 +3135,7 @@ scan_reads_nospill (insn_info_t insn_info, bitmap gen, bitmap kill) |
} |
} |
} |
- |
+ |
read_info = read_info->next; |
} |
} |
@@ -3144,7 +3150,7 @@ scan_reads_spill (read_info_t read_info, bitmap gen, bitmap kill) |
{ |
if (read_info->alias_set) |
{ |
- int index = get_bitmap_index (clear_alias_group, |
+ int index = get_bitmap_index (clear_alias_group, |
read_info->alias_set); |
if (index != 0) |
{ |
@@ -3153,7 +3159,7 @@ scan_reads_spill (read_info_t read_info, bitmap gen, bitmap kill) |
bitmap_clear_bit (gen, index); |
} |
} |
- |
+ |
read_info = read_info->next; |
} |
} |
@@ -3206,7 +3212,7 @@ dse_step3_scan (bool for_spills, basic_block bb) |
insn_info = bb_info->last_insn; |
else |
insn_info = find_insn_before_first_wild_read (bb_info); |
- |
+ |
/* In the spill case or in the no_spill case if there is no wild |
read in the block, we will need a kill set. */ |
if (insn_info == bb_info->last_insn) |
@@ -3216,7 +3222,7 @@ dse_step3_scan (bool for_spills, basic_block bb) |
else |
bb_info->kill = BITMAP_ALLOC (NULL); |
} |
- else |
+ else |
if (bb_info->kill) |
BITMAP_FREE (bb_info->kill); |
@@ -3226,7 +3232,7 @@ dse_step3_scan (bool for_spills, basic_block bb) |
this phase. */ |
if (insn_info->insn && INSN_P (insn_info->insn)) |
{ |
- /* Process the read(s) last. */ |
+ /* Process the read(s) last. */ |
if (for_spills) |
{ |
scan_stores_spill (insn_info->store_rec, bb_info->gen, bb_info->kill); |
@@ -3237,7 +3243,7 @@ dse_step3_scan (bool for_spills, basic_block bb) |
scan_stores_nospill (insn_info->store_rec, bb_info->gen, bb_info->kill); |
scan_reads_nospill (insn_info, bb_info->gen, bb_info->kill); |
} |
- } |
+ } |
insn_info = insn_info->prev_insn; |
} |
@@ -3252,12 +3258,12 @@ dse_step3_exit_block_scan (bb_info_t bb_info) |
{ |
/* The gen set is all 0's for the exit block except for the |
frame_pointer_group. */ |
- |
+ |
if (stores_off_frame_dead_at_return) |
{ |
unsigned int i; |
group_info_t group; |
- |
+ |
for (i = 0; VEC_iterate (group_info_t, rtx_group_vec, i, group); i++) |
{ |
if (group->process_globally && group->frame_related) |
@@ -3282,9 +3288,9 @@ mark_reachable_blocks (sbitmap unreachable_blocks, basic_block bb) |
{ |
RESET_BIT (unreachable_blocks, bb->index); |
FOR_EACH_EDGE (e, ei, bb->preds) |
- { |
+ { |
mark_reachable_blocks (unreachable_blocks, e->src); |
- } |
+ } |
} |
} |
@@ -3298,7 +3304,7 @@ dse_step3 (bool for_spills) |
sbitmap_iterator sbi; |
bitmap all_ones = NULL; |
unsigned int i; |
- |
+ |
sbitmap_ones (unreachable_blocks); |
FOR_ALL_BB (bb) |
@@ -3410,7 +3416,7 @@ dse_confluence_n (edge e) |
/* Propagate the info from the out to the in set of BB_INDEX's basic |
- block. There are three cases: |
+ block. There are three cases: |
1) The block has no kill set. In this case the kill set is all |
ones. It does not matter what the out set of the block is, none of |
@@ -3436,12 +3442,12 @@ dse_transfer_function (int bb_index) |
{ |
/* Case 3 above. */ |
if (bb_info->in) |
- return bitmap_ior_and_compl (bb_info->in, bb_info->gen, |
+ return bitmap_ior_and_compl (bb_info->in, bb_info->gen, |
bb_info->out, bb_info->kill); |
else |
{ |
bb_info->in = BITMAP_ALLOC (NULL); |
- bitmap_ior_and_compl (bb_info->in, bb_info->gen, |
+ bitmap_ior_and_compl (bb_info->in, bb_info->gen, |
bb_info->out, bb_info->kill); |
return true; |
} |
@@ -3470,9 +3476,9 @@ dse_transfer_function (int bb_index) |
static void |
dse_step4 (void) |
{ |
- df_simple_dataflow (DF_BACKWARD, NULL, dse_confluence_0, |
- dse_confluence_n, dse_transfer_function, |
- all_blocks, df_get_postorder (DF_BACKWARD), |
+ df_simple_dataflow (DF_BACKWARD, NULL, dse_confluence_0, |
+ dse_confluence_n, dse_transfer_function, |
+ all_blocks, df_get_postorder (DF_BACKWARD), |
df_get_n_blocks (DF_BACKWARD)); |
if (dump_file) |
{ |
@@ -3535,7 +3541,7 @@ dse_step5_nospill (void) |
/* There may have been code deleted by the dce pass run before |
this phase. */ |
- if (insn_info->insn |
+ if (insn_info->insn |
&& INSN_P (insn_info->insn) |
&& (!insn_info->cannot_delete) |
&& (!bitmap_empty_p (v))) |
@@ -3544,7 +3550,7 @@ dse_step5_nospill (void) |
/* Try to delete the current insn. */ |
deleted = true; |
- |
+ |
/* Skip the clobbers. */ |
while (!store_info->is_set) |
store_info = store_info->next; |
@@ -3554,19 +3560,19 @@ dse_step5_nospill (void) |
else |
{ |
HOST_WIDE_INT i; |
- group_info_t group_info |
+ group_info_t group_info |
= VEC_index (group_info_t, rtx_group_vec, store_info->group_id); |
- |
+ |
for (i = store_info->begin; i < store_info->end; i++) |
{ |
int index = get_bitmap_index (group_info, i); |
- |
+ |
if (dump_file) |
- fprintf (dump_file, "i = %d, index = %d\n", (int)i, index); |
+ fprintf (dump_file, "i = %d, index = %d\n", (int)i, index); |
if (index == 0 || !bitmap_bit_p (v, index)) |
{ |
if (dump_file) |
- fprintf (dump_file, "failing at i = %d\n", (int)i); |
+ fprintf (dump_file, "failing at i = %d\n", (int)i); |
deleted = false; |
break; |
} |
@@ -3586,7 +3592,7 @@ dse_step5_nospill (void) |
/* We do want to process the local info if the insn was |
deleted. For instance, if the insn did a wild read, we |
no longer need to trash the info. */ |
- if (insn_info->insn |
+ if (insn_info->insn |
&& INSN_P (insn_info->insn) |
&& (!deleted)) |
{ |
@@ -3604,7 +3610,7 @@ dse_step5_nospill (void) |
scan_reads_nospill (insn_info, v, NULL); |
} |
} |
- |
+ |
insn_info = insn_info->prev_insn; |
} |
} |
@@ -3626,7 +3632,7 @@ dse_step5_spill (void) |
bool deleted = false; |
/* There may have been code deleted by the dce pass run before |
this phase. */ |
- if (insn_info->insn |
+ if (insn_info->insn |
&& INSN_P (insn_info->insn) |
&& (!insn_info->cannot_delete) |
&& (!bitmap_empty_p (v))) |
@@ -3634,12 +3640,12 @@ dse_step5_spill (void) |
/* Try to delete the current insn. */ |
store_info_t store_info = insn_info->store_rec; |
deleted = true; |
- |
+ |
while (store_info) |
{ |
if (store_info->alias_set) |
{ |
- int index = get_bitmap_index (clear_alias_group, |
+ int index = get_bitmap_index (clear_alias_group, |
store_info->alias_set); |
if (index == 0 || !bitmap_bit_p (v, index)) |
{ |
@@ -3647,14 +3653,14 @@ dse_step5_spill (void) |
break; |
} |
} |
- else |
+ else |
deleted = false; |
store_info = store_info->next; |
} |
if (deleted && dbg_cnt (dse)) |
{ |
if (dump_file) |
- fprintf (dump_file, "Spill deleting insn %d\n", |
+ fprintf (dump_file, "Spill deleting insn %d\n", |
INSN_UID (insn_info->insn)); |
check_for_inc_dec (insn_info->insn); |
delete_insn (insn_info->insn); |
@@ -3662,15 +3668,15 @@ dse_step5_spill (void) |
insn_info->insn = NULL; |
} |
} |
- |
- if (insn_info->insn |
+ |
+ if (insn_info->insn |
&& INSN_P (insn_info->insn) |
&& (!deleted)) |
{ |
scan_stores_spill (insn_info->store_rec, v, NULL); |
scan_reads_spill (insn_info->read_rec, v, NULL); |
} |
- |
+ |
insn_info = insn_info->prev_insn; |
} |
} |
@@ -3731,16 +3737,16 @@ dse_step6 (void) |
/*---------------------------------------------------------------------------- |
Seventh step. |
- Destroy everything left standing. |
+ Destroy everything left standing. |
----------------------------------------------------------------------------*/ |
-static void |
+static void |
dse_step7 (bool global_done) |
{ |
unsigned int i; |
group_info_t group; |
basic_block bb; |
- |
+ |
for (i = 0; VEC_iterate (group_info_t, rtx_group_vec, i, group); i++) |
{ |
free (group->offset_map_n); |
@@ -3826,7 +3832,7 @@ rest_of_handle_dse (void) |
pass to process the spills. These are special in that they are |
totally transparent, i.e, there is no aliasing issues that need |
to be considered. This means that the wild reads that kill |
- everything else do not apply here. */ |
+ everything else do not apply here. */ |
if (clear_alias_sets && dse_step2_spill ()) |
{ |
if (!did_global) |