aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-07-14 12:19:16 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-07-14 12:19:16 +0000
commitbf9899d44b2e83156d90e3b4c48765d57cea5061 (patch)
tree1c9854d1801c280bb54b4c80436d1f0834ed3417 /gcc
parentb1c8622e9534e5c614785e80b35c423fe0e454c1 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/tree-ssa-forwprop.c11
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);