aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2011-06-08 14:16:15 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2011-06-08 14:16:15 +0200
commitd9c77712d5b14e131210303ffbef49096ae613d1 (patch)
treef181c999f87d687e218d4cff08ad1561226b7504
parent545dc5e3245fe4abf8c738424d293988e8c67b8c (diff)
downloadgcc-d9c77712d5b14e131210303ffbef49096ae613d1.zip
gcc-d9c77712d5b14e131210303ffbef49096ae613d1.tar.gz
gcc-d9c77712d5b14e131210303ffbef49096ae613d1.tar.bz2
tree-sra.c (mark_rw_status): Removed.
2011-06-08 Martin Jambor <mjambor@suse.cz> * tree-sra.c (mark_rw_status): Removed. (analyze_access_subtree): New parameter parent instead of mark_read and mark_write, propagate from that. From-SVN: r174806
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-sra.c45
2 files changed, 20 insertions, 31 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7ee6821..024f6b6b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-06-08 Martin Jambor <mjambor@suse.cz>
+
+ * tree-sra.c (mark_rw_status): Removed.
+ (analyze_access_subtree): New parameter parent instead of
+ mark_read and mark_write, propagate from that.
+
2011-06-08 Julian Brown <julian@codesourcery.com>
* config/arm/arm.c (arm_libcall_uses_aapcs_base): Use correct ABI
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 3183b93..47d4471 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1864,8 +1864,6 @@ expr_with_var_bounded_array_refs_p (tree expr)
return false;
}
-enum mark_rw_status { SRA_MRRW_NOTHING, SRA_MRRW_DIRECT, SRA_MRRW_ASSIGN};
-
/* Analyze the subtree of accesses rooted in ROOT, scheduling replacements when
both seeming beneficial and when ALLOW_REPLACEMENTS allows it. Also set all
sorts of access flags appropriately along the way, notably always set
@@ -1905,9 +1903,8 @@ enum mark_rw_status { SRA_MRRW_NOTHING, SRA_MRRW_DIRECT, SRA_MRRW_ASSIGN};
1 1 1 1 Yes Any of the above yeses */
static bool
-analyze_access_subtree (struct access *root, bool allow_replacements,
- enum mark_rw_status mark_read,
- enum mark_rw_status mark_write)
+analyze_access_subtree (struct access *root, struct access *parent,
+ bool allow_replacements)
{
struct access *child;
HOST_WIDE_INT limit = root->offset + root->size;
@@ -1915,29 +1912,17 @@ analyze_access_subtree (struct access *root, bool allow_replacements,
bool scalar = is_gimple_reg_type (root->type);
bool hole = false, sth_created = false;
- if (root->grp_assignment_read)
- mark_read = SRA_MRRW_ASSIGN;
- else if (mark_read == SRA_MRRW_ASSIGN)
- {
- root->grp_read = 1;
- root->grp_assignment_read = 1;
- }
- else if (mark_read == SRA_MRRW_DIRECT)
- root->grp_read = 1;
- else if (root->grp_read)
- mark_read = SRA_MRRW_DIRECT;
-
- if (root->grp_assignment_write)
- mark_write = SRA_MRRW_ASSIGN;
- else if (mark_write == SRA_MRRW_ASSIGN)
+ if (parent)
{
- root->grp_write = 1;
- root->grp_assignment_write = 1;
+ if (parent->grp_read)
+ root->grp_read = 1;
+ if (parent->grp_assignment_read)
+ root->grp_assignment_read = 1;
+ if (parent->grp_write)
+ root->grp_write = 1;
+ if (parent->grp_assignment_write)
+ root->grp_assignment_write = 1;
}
- else if (mark_write == SRA_MRRW_DIRECT)
- root->grp_write = 1;
- else if (root->grp_write)
- mark_write = SRA_MRRW_DIRECT;
if (root->grp_unscalarizable_region)
allow_replacements = false;
@@ -1952,9 +1937,8 @@ analyze_access_subtree (struct access *root, bool allow_replacements,
else
covered_to += child->size;
- sth_created |= analyze_access_subtree (child,
- allow_replacements && !scalar,
- mark_read, mark_write);
+ sth_created |= analyze_access_subtree (child, root,
+ allow_replacements && !scalar);
root->grp_unscalarized_data |= child->grp_unscalarized_data;
hole |= !child->grp_covered;
@@ -2002,8 +1986,7 @@ analyze_access_trees (struct access *access)
while (access)
{
- if (analyze_access_subtree (access, true,
- SRA_MRRW_NOTHING, SRA_MRRW_NOTHING))
+ if (analyze_access_subtree (access, NULL, true))
ret = true;
access = access->next_grp;
}