aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-11-27 20:29:15 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2012-11-27 20:29:15 +0000
commit92390dd17128b1e4f4c456e5185566bbe5ee35a4 (patch)
tree436c983a432ffc86e3f81d2f07a71c8635c1bf4b /gcc/gcse.c
parent18e1fd7565cd40baf448858cb069d25b99338a08 (diff)
downloadgcc-92390dd17128b1e4f4c456e5185566bbe5ee35a4.zip
gcc-92390dd17128b1e4f4c456e5185566bbe5ee35a4.tar.gz
gcc-92390dd17128b1e4f4c456e5185566bbe5ee35a4.tar.bz2
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
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r--gcc/gcse.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index ad09afd..ee45b65 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -1677,6 +1677,10 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap)
{
bitmap_iterator bi;
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
do any list walking for them. */
@@ -1685,27 +1689,27 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap)
bitmap_clear_bit (bmap[bb_index], indx);
}
- /* 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)
- {
- vec<modify_pair> list
- = canon_modify_mem_list[bb_index];
- modify_pair *pair;
- unsigned ix;
+ /* 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)
+ {
+ vec<modify_pair> list
+ = canon_modify_mem_list[bb_index];
+ modify_pair *pair;
+ unsigned ix;
- FOR_EACH_VEC_ELT_REVERSE (list, ix, pair)
- {
- rtx dest = pair->dest;
- rtx dest_addr = pair->dest_addr;
+ FOR_EACH_VEC_ELT_REVERSE (list, ix, pair)
+ {
+ rtx dest = pair->dest;
+ rtx dest_addr = pair->dest_addr;
- if (canon_true_dependence (dest, GET_MODE (dest),
- dest_addr, x, NULL_RTX))
- bitmap_clear_bit (bmap[bb_index], indx);
- }
- }
+ if (canon_true_dependence (dest, GET_MODE (dest),
+ dest_addr, x, x_addr))
+ bitmap_clear_bit (bmap[bb_index], indx);
+ }
+ }
}
x = XEXP (x, 0);