diff options
author | Richard Guenther <rguenther@suse.de> | 2010-07-14 12:19:16 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-07-14 12:19:16 +0000 |
commit | bf9899d44b2e83156d90e3b4c48765d57cea5061 (patch) | |
tree | 1c9854d1801c280bb54b4c80436d1f0834ed3417 /gcc | |
parent | b1c8622e9534e5c614785e80b35c423fe0e454c1 (diff) | |
download | gcc-bf9899d44b2e83156d90e3b4c48765d57cea5061.zip gcc-bf9899d44b2e83156d90e3b4c48765d57cea5061.tar.gz gcc-bf9899d44b2e83156d90e3b4c48765d57cea5061.tar.bz2 |
re PR middle-end/44824 (internal compiler error: verify_stmts failed)
2010-07-14 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44824
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Use
is_gimple_mem_ref_addr.
(tree_ssa_forward_propagate_single_use_vars): Do not propagate
non-decl_address_invariant_p addresses.
From-SVN: r162177
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 11 |
2 files changed, 14 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f0795e..daa007a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-07-14 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/44824 + * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Use + is_gimple_mem_ref_addr. + (tree_ssa_forward_propagate_single_use_vars): Do not propagate + non-decl_address_invariant_p addresses. + 2010-07-14 Bernd Schmidt <bernds@codesourcery.com> * reload.c (find_reloads): Revert code to penalize small register diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 5044aff..b627804 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -804,9 +804,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, fold_convert (ptr_type_node, gimple_assign_rhs2 (use_stmt))); if (TREE_CODE (new_def_rhs) == MEM_REF - && TREE_CODE (TREE_OPERAND (new_def_rhs, 0)) == ADDR_EXPR - && !DECL_P (TREE_OPERAND (TREE_OPERAND (new_def_rhs, 0), 0)) - && !CONSTANT_CLASS_P (TREE_OPERAND (TREE_OPERAND (new_def_rhs, 0), 0))) + && !is_gimple_mem_ref_addr (TREE_OPERAND (new_def_rhs, 0))) return false; new_def_rhs = build_fold_addr_expr_with_type (new_def_rhs, TREE_TYPE (rhs)); @@ -1398,8 +1396,11 @@ tree_ssa_forward_propagate_single_use_vars (void) && TREE_CODE (rhs) == ADDR_EXPR && POINTER_TYPE_P (TREE_TYPE (lhs)))) { - STRIP_NOPS (rhs); - if (!stmt_references_abnormal_ssa_name (stmt) + tree base = get_base_address (TREE_OPERAND (rhs, 0)); + if ((!base + || !DECL_P (base) + || decl_address_invariant_p (base)) + && !stmt_references_abnormal_ssa_name (stmt) && forward_propagate_addr_expr (lhs, rhs)) { release_defs (stmt); |