Commit 3515a00b by Martin Jambor Committed by Martin Jambor

re PR tree-optimization/50052 (FAIL: gcc.dg/ipa/ipa-sra-2.c scan-tree-dump eipa_sra)

2012-03-26  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/50052
	* tree-sra.c (tree_non_aligned_mem_p): Removed.
	(tree_non_aligned_mem_for_access_p): Likewise.
	(build_accesses_from_assign): Removed strict alignment requirements
	checks.
	(access_precludes_ipa_sra_p): Likewise.

	* testsuite/gcc.dg/ipa/ipa-sra-2.c: Also run on strict-alignment
	platforms.

From-SVN: r185807
parent 1a0fd3d3
2012-03-26 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/50052
* tree-sra.c (tree_non_aligned_mem_p): Removed.
(tree_non_aligned_mem_for_access_p): Likewise.
(build_accesses_from_assign): Removed strict alignment requirements
checks.
(access_precludes_ipa_sra_p): Likewise.
2012-03-26 Richard Guenther <rguenther@suse.de> 2012-03-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52701 PR tree-optimization/52701
......
2012-03-26 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/50052
* gcc.dg/ipa/ipa-sra-2.c: Also run on strict-alignment platforms.
2012-03-26 Richard Guenther <rguenther@suse.de> 2012-03-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52701 PR tree-optimization/52701
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-details" } */ /* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-details" } */
/* { dg-require-effective-target non_strict_align } */
struct bovid struct bovid
{ {
......
...@@ -1081,53 +1081,6 @@ disqualify_ops_if_throwing_stmt (gimple stmt, tree lhs, tree rhs) ...@@ -1081,53 +1081,6 @@ disqualify_ops_if_throwing_stmt (gimple stmt, tree lhs, tree rhs)
return false; return false;
} }
/* Return true if EXP is a memory reference less aligned than ALIGN. This is
invoked only on strict-alignment targets. */
static bool
tree_non_aligned_mem_p (tree exp, unsigned int align)
{
unsigned int exp_align;
if (TREE_CODE (exp) == VIEW_CONVERT_EXPR)
exp = TREE_OPERAND (exp, 0);
if (TREE_CODE (exp) == SSA_NAME || is_gimple_min_invariant (exp))
return false;
/* get_object_alignment will fall back to BITS_PER_UNIT if it cannot
compute an explicit alignment. Pretend that dereferenced pointers
are always aligned on strict-alignment targets. */
if (TREE_CODE (exp) == MEM_REF || TREE_CODE (exp) == TARGET_MEM_REF)
exp_align = get_object_or_type_alignment (exp);
else
exp_align = get_object_alignment (exp);
if (exp_align < align)
return true;
return false;
}
/* Return true if EXP is a memory reference less aligned than what the access
ACC would require. This is invoked only on strict-alignment targets. */
static bool
tree_non_aligned_mem_for_access_p (tree exp, struct access *acc)
{
unsigned int acc_align;
/* The alignment of the access is that of its expression. However, it may
have been artificially increased, e.g. by a local alignment promotion,
so we cap it to the alignment of the type of the base, on the grounds
that valid sub-accesses cannot be more aligned than that. */
acc_align = get_object_alignment (acc->expr);
if (acc->base && acc_align > TYPE_ALIGN (TREE_TYPE (acc->base)))
acc_align = TYPE_ALIGN (TREE_TYPE (acc->base));
return tree_non_aligned_mem_p (exp, acc_align);
}
/* Scan expressions occuring in STMT, create access structures for all accesses /* Scan expressions occuring in STMT, create access structures for all accesses
to candidates for scalarization and remove those candidates which occur in to candidates for scalarization and remove those candidates which occur in
statements or expressions that prevent them from being split apart. Return statements or expressions that prevent them from being split apart. Return
...@@ -1154,11 +1107,7 @@ build_accesses_from_assign (gimple stmt) ...@@ -1154,11 +1107,7 @@ build_accesses_from_assign (gimple stmt)
lacc = build_access_from_expr_1 (lhs, stmt, true); lacc = build_access_from_expr_1 (lhs, stmt, true);
if (lacc) if (lacc)
{ lacc->grp_assignment_write = 1;
lacc->grp_assignment_write = 1;
if (STRICT_ALIGNMENT && tree_non_aligned_mem_for_access_p (rhs, lacc))
lacc->grp_unscalarizable_region = 1;
}
if (racc) if (racc)
{ {
...@@ -1166,8 +1115,6 @@ build_accesses_from_assign (gimple stmt) ...@@ -1166,8 +1115,6 @@ build_accesses_from_assign (gimple stmt)
if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt) if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt)
&& !is_gimple_reg_type (racc->type)) && !is_gimple_reg_type (racc->type))
bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base)); bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base));
if (STRICT_ALIGNMENT && tree_non_aligned_mem_for_access_p (lhs, racc))
racc->grp_unscalarizable_region = 1;
} }
if (lacc && racc if (lacc && racc
...@@ -3835,10 +3782,6 @@ access_precludes_ipa_sra_p (struct access *access) ...@@ -3835,10 +3782,6 @@ access_precludes_ipa_sra_p (struct access *access)
|| gimple_code (access->stmt) == GIMPLE_ASM)) || gimple_code (access->stmt) == GIMPLE_ASM))
return true; return true;
if (STRICT_ALIGNMENT
&& tree_non_aligned_mem_p (access->expr, TYPE_ALIGN (access->type)))
return true;
return false; return false;
} }
......
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