Commit 92390dd1 by Paolo Bonzini Committed by Paolo Bonzini

re PR rtl-optimization/55489 (insane PRE memory usage with PIE (translate.i))

2012-11-27  Paolo Bonzini  <pbonzini@redhat.com>

	PR rtl-optimization/55489
	* gcse.c (compute_transp): Precompute a canonical version
	of XEXP (x, 0), and pass it to canon_true_dependence.

	* alias.c (init_alias_analysis): Fix allocation of reg_known_value.

From-SVN: r193868
parent 18e1fd75
2012-11-27 Paolo Bonzini <pbonzini@redhat.com>
PR rtl-optimization/55489
* gcse.c (compute_transp): Precompute a canonical version
of XEXP (x, 0), and pass it to canon_true_dependence.
* alias.c (init_alias_analysis): Fix allocation of reg_known_value.
2012-11-27 Diego Novillo <dnovillo@google.com> 2012-11-27 Diego Novillo <dnovillo@google.com>
* vec.h: Replace 'class vec' with 'struct vec' everywhere. * vec.h: Replace 'class vec' with 'struct vec' everywhere.
...@@ -2808,7 +2808,7 @@ init_alias_analysis (void) ...@@ -2808,7 +2808,7 @@ init_alias_analysis (void)
timevar_push (TV_ALIAS_ANALYSIS); timevar_push (TV_ALIAS_ANALYSIS);
vec_alloc (reg_known_value, maxreg - FIRST_PSEUDO_REGISTER); vec_safe_grow_cleared (reg_known_value, maxreg - FIRST_PSEUDO_REGISTER);
reg_known_equiv_p = sbitmap_alloc (maxreg - FIRST_PSEUDO_REGISTER); reg_known_equiv_p = sbitmap_alloc (maxreg - FIRST_PSEUDO_REGISTER);
/* If we have memory allocated from the previous run, use it. */ /* If we have memory allocated from the previous run, use it. */
......
...@@ -1677,6 +1677,10 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap) ...@@ -1677,6 +1677,10 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap)
{ {
bitmap_iterator bi; bitmap_iterator bi;
unsigned bb_index; unsigned bb_index;
rtx x_addr;
x_addr = get_addr (XEXP (x, 0));
x_addr = canon_rtx (x_addr);
/* First handle all the blocks with calls. We don't need to /* First handle all the blocks with calls. We don't need to
do any list walking for them. */ do any list walking for them. */
...@@ -1685,27 +1689,27 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap) ...@@ -1685,27 +1689,27 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap)
bitmap_clear_bit (bmap[bb_index], indx); bitmap_clear_bit (bmap[bb_index], indx);
} }
/* Now iterate over the blocks which have memory modifications /* Now iterate over the blocks which have memory modifications
but which do not have any calls. */ but which do not have any calls. */
EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set, EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set,
blocks_with_calls, blocks_with_calls,
0, bb_index, bi) 0, bb_index, bi)
{ {
vec<modify_pair> list vec<modify_pair> list
= canon_modify_mem_list[bb_index]; = canon_modify_mem_list[bb_index];
modify_pair *pair; modify_pair *pair;
unsigned ix; unsigned ix;
FOR_EACH_VEC_ELT_REVERSE (list, ix, pair) FOR_EACH_VEC_ELT_REVERSE (list, ix, pair)
{ {
rtx dest = pair->dest; rtx dest = pair->dest;
rtx dest_addr = pair->dest_addr; rtx dest_addr = pair->dest_addr;
if (canon_true_dependence (dest, GET_MODE (dest), if (canon_true_dependence (dest, GET_MODE (dest),
dest_addr, x, NULL_RTX)) dest_addr, x, x_addr))
bitmap_clear_bit (bmap[bb_index], indx); bitmap_clear_bit (bmap[bb_index], indx);
} }
} }
} }
x = XEXP (x, 0); x = XEXP (x, 0);
......
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