re PR tree-optimization/50052 (FAIL: gcc.dg/ipa/ipa-sra-2.c scan-tree-dump eipa_sra)
authorMartin Jambor <mjambor@suse.cz>
Mon, 26 Mar 2012 15:46:14 +0000 (17:46 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Mon, 26 Mar 2012 15:46:14 +0000 (17:46 +0200)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ipa/ipa-sra-2.c
gcc/tree-sra.c

index 4dce3474c38d8f52b22d9a895a966999f3519bd3..697b5b1f3459671c109179b895e06f81f6418591 100644 (file)
@@ -1,3 +1,12 @@
+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>
 
        PR tree-optimization/52701
index 867b8ca61809820d14d3f9d335341e73c7c96064..e28c3dd0f51700815b543b34bd8e5f425d3517a4 100644 (file)
@@ -1,3 +1,8 @@
+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>
 
        PR tree-optimization/52701
index c6b4d63aa78d0281b1aea41b834748d439cbb42f..3437a81aa2cc93e19386408ff9b02b9ffd98c8c4 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-details"  } */
-/* { dg-require-effective-target non_strict_align } */
 
 struct bovid
 {
index 6cf6c15d4a4ea7a1240376efab1ec506e675cd2c..4d1aa5f1ecaf7891830e28b68f241b030e74fe19 100644 (file)
@@ -1081,53 +1081,6 @@ disqualify_ops_if_throwing_stmt (gimple stmt, tree lhs, tree rhs)
   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
    to candidates for scalarization and remove those candidates which occur in
    statements or expressions that prevent them from being split apart.  Return
@@ -1154,11 +1107,7 @@ build_accesses_from_assign (gimple stmt)
   lacc = build_access_from_expr_1 (lhs, stmt, true);
 
   if (lacc)
-    {
-      lacc->grp_assignment_write = 1;
-      if (STRICT_ALIGNMENT && tree_non_aligned_mem_for_access_p (rhs, lacc))
-        lacc->grp_unscalarizable_region = 1;
-    }
+    lacc->grp_assignment_write = 1;
 
   if (racc)
     {
@@ -1166,8 +1115,6 @@ build_accesses_from_assign (gimple stmt)
       if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt)
          && !is_gimple_reg_type (racc->type))
        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
@@ -3835,10 +3782,6 @@ access_precludes_ipa_sra_p (struct access *access)
          || gimple_code (access->stmt) == GIMPLE_ASM))
     return true;
 
-  if (STRICT_ALIGNMENT
-      && tree_non_aligned_mem_p (access->expr, TYPE_ALIGN (access->type)))
-    return true;
-
   return false;
 }