summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-28 05:13:10 +0000
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-28 05:13:10 +0000
commitf45a1ca16b84548bea3b49f7090e5fc6affe776d (patch)
treea9aa14b2fab671abc299a440ee7b02eaae3b2aeb
parent4d0876abe8aa84ef5dd8a42c74c6a8bb76197afc (diff)
downloadgcc-f45a1ca16b84548bea3b49f7090e5fc6affe776d.tar.gz
* tree-optimize.c (init_tree_optimization_passes): Schedule
pass_may_alias right after the program is renamed into SSA. * tree-pass.h (PROP_alias): Define. * tree-outof-ssa.c (pass_del_ssa): Require PROP_alias. * tree-sra.c (pass_sra): Likewise. * tree-ssa-ccp.c (pass_ccp): Likewise. * tree-ssa-copyrename.c (pass_rename_ssa_ccp): Likewise. * tree-ssa-dce.c (pass_dce): Likewise. * tree-ssa-dom.c (pass_dominator): Likewise. * tree-ssa-dse.c (pass_dse): Likewise. * tree-ssa-forwprop.c (pass_forwprop): Likewise. * tree-ssa-loop-ch.c (pass_ch): Likewise. * tree-ssa-phiopt.c (pass_phiopt): Likewise. * tree-ssa-pre.c (pass_pre): Likewise. * tree-tailcall.c (pass_tail_recursion): Likewise. * tree-ssa.c (pass_redundant_phi): Likewise. * tree-ssa-alias.c (aliases_computed_p): Remove. Update all users. (init_alias_info): Do not mark all type tags for renaming unconditionally. Clear may_aliases from every symbol. (setup_pointers_and_addressables): If a pointer has not been dereferenced and it had a type tag, clear it and mark the old tag for renaming. testsuite/ChangeLog * gcc.dg/tree-ssa/20030714-2.c: Adjust number of expected conditionals. * gcc.dg/tree-ssa/20031022-1.c: Adjust number of expected loads. * gcc.dg/tree-ssa/ssa-dom-cse-1.c: Expect optimization in DOM1. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85255 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog27
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20031022-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c7
-rw-r--r--gcc/tree-optimize.c1
-rw-r--r--gcc/tree-outof-ssa.c2
-rw-r--r--gcc/tree-pass.h1
-rw-r--r--gcc/tree-sra.c2
-rw-r--r--gcc/tree-ssa-alias.c123
-rw-r--r--gcc/tree-ssa-ccp.c4
-rw-r--r--gcc/tree-ssa-copyrename.c2
-rw-r--r--gcc/tree-ssa-dce.c4
-rw-r--r--gcc/tree-ssa-dom.c2
-rw-r--r--gcc/tree-ssa-dse.c3
-rw-r--r--gcc/tree-ssa-forwprop.c3
-rw-r--r--gcc/tree-ssa-loop-ch.c2
-rw-r--r--gcc/tree-ssa-operands.c85
-rw-r--r--gcc/tree-ssa-phiopt.c2
-rw-r--r--gcc/tree-ssa-pre.c5
-rw-r--r--gcc/tree-ssa.c11
-rw-r--r--gcc/tree-tailcall.c4
22 files changed, 158 insertions, 147 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 52bbdd9a9f3..a3f30ff9d3d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,32 @@
2004-07-28 Diego Novillo <dnovillo@redhat.com>
+ * tree-optimize.c (init_tree_optimization_passes): Schedule
+ pass_may_alias right after the program is renamed into SSA.
+ * tree-pass.h (PROP_alias): Define.
+ * tree-outof-ssa.c (pass_del_ssa): Require PROP_alias.
+ * tree-sra.c (pass_sra): Likewise.
+ * tree-ssa-ccp.c (pass_ccp): Likewise.
+ * tree-ssa-copyrename.c (pass_rename_ssa_ccp): Likewise.
+ * tree-ssa-dce.c (pass_dce): Likewise.
+ * tree-ssa-dom.c (pass_dominator): Likewise.
+ * tree-ssa-dse.c (pass_dse): Likewise.
+ * tree-ssa-forwprop.c (pass_forwprop): Likewise.
+ * tree-ssa-loop-ch.c (pass_ch): Likewise.
+ * tree-ssa-phiopt.c (pass_phiopt): Likewise.
+ * tree-ssa-pre.c (pass_pre): Likewise.
+ * tree-tailcall.c (pass_tail_recursion): Likewise.
+ * tree-ssa.c (pass_redundant_phi): Likewise.
+ * tree-ssa-alias.c (aliases_computed_p): Remove.
+ Update all users.
+ (init_alias_info): Do not mark all type tags for renaming
+ unconditionally.
+ Clear may_aliases from every symbol.
+ (setup_pointers_and_addressables): If a pointer has not been
+ dereferenced and it had a type tag, clear it and mark the old
+ tag for renaming.
+
+2004-07-28 Diego Novillo <dnovillo@redhat.com>
+
PR tree-optimization/16705
* tree-ssa-alias.c (create_global_var): Set DECL_EXTERNAL on
.GLOBAL_VAR.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 35a5a3aa376..8b99613999f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2004-07-28 Diego Novillo <dnovillo@redhat.com>
+
+ * gcc.dg/tree-ssa/20030714-2.c: Adjust number of expected
+ conditionals.
+ * gcc.dg/tree-ssa/20031022-1.c: Adjust number of expected
+ loads.
+ * gcc.dg/tree-ssa/ssa-dom-cse-1.c: Expect optimization in
+ DOM1.
+
2004-07-27 Andrew Pinski <apinski@apple.com>
* g++.dg/rtti/tinfo1.C: Correct the xfail.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c b/gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c
index 6a43360b07f..2c8a84a494d 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c
@@ -32,8 +32,8 @@ get_alias_set (t)
}
}
-/* There should be exactly four IF conditionals if we thread jumps
+/* There should be exactly three IF conditionals if we thread jumps
properly. */
-/* { dg-final { scan-tree-dump-times "if " 4 "dom3"} } */
+/* { dg-final { scan-tree-dump-times "if " 3 "dom3"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20031022-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20031022-1.c
index 546e6b00759..d4f9b3c3611 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/20031022-1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/20031022-1.c
@@ -23,5 +23,5 @@ blah (int arf)
foo (e);
}
-/* There should be two loads from entry_exit_blocks[1].pred. */
+/* There should be one load from entry_exit_blocks[1].pred. */
/* { dg-final { scan-tree-dump-times "entry_exit_blocks.1..pred" 2 "dom1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c
index 4e4ed8c912f..52531009e67 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-dom2-details" } */
+/* { dg-options "-O2 -fdump-tree-dom1-details" } */
int t(int a) __attribute__ ((const));
void q (void);
void
@@ -11,6 +11,5 @@ threading(int a,int b)
q();
}
}
-/* We should thread the jump twice and eliminate it. Test this in
- DOM2, after aliases have been computed. */
-/* { dg-final { scan-tree-dump-times "Replaced.* t " 1 "dom2"} } */
+/* We should thread the jump twice and eliminate it. */
+/* { dg-final { scan-tree-dump-times "Replaced.* t " 1 "dom1"} } */
diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c
index d575990cce6..d41bebc618a 100644
--- a/gcc/tree-optimize.c
+++ b/gcc/tree-optimize.c
@@ -321,6 +321,7 @@ init_tree_optimization_passes (void)
NEXT_PASS (pass_referenced_vars);
NEXT_PASS (pass_build_pta);
NEXT_PASS (pass_build_ssa);
+ NEXT_PASS (pass_may_alias);
NEXT_PASS (pass_rename_ssa_copies);
NEXT_PASS (pass_early_warn_uninitialized);
NEXT_PASS (pass_dce);
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c
index d1899981c1f..1fef266646d 100644
--- a/gcc/tree-outof-ssa.c
+++ b/gcc/tree-outof-ssa.c
@@ -2213,7 +2213,7 @@ struct tree_opt_pass pass_del_ssa =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_SSA_TO_NORMAL, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
/* ??? If TER is enabled, we also kill gimple. */
PROP_ssa, /* properties_destroyed */
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index 9651c9e659b..2bf63ee77b6 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -76,6 +76,7 @@ struct tree_opt_pass
#define PROP_ssa (1 << 6)
#define PROP_no_crit_edges (1 << 7)
#define PROP_rtl (1 << 8)
+#define PROP_alias (1 << 9)
#define PROP_trees \
(PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh)
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 30d8e34d32b..b3fa20c6c77 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -2118,7 +2118,7 @@ struct tree_opt_pass pass_sra =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_SRA, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 64476ebe301..94ccd800929 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -175,13 +175,6 @@ bitmap call_clobbered_vars;
variable). */
bitmap addressable_vars;
-/* 'true' after aliases have been computed (see compute_may_aliases). This
- is used by get_stmt_operands and its helpers to determine what to do
- when scanning an operand for a variable that may be aliased. If
- may-alias information is still not available, the statement is marked as
- having volatile operands. */
-bool aliases_computed_p;
-
/* When the program has too many call-clobbered variables and call-sites,
this variable is used to represent the clobbering effects of function
calls. In these cases, all the call clobbered variables in the program
@@ -350,9 +343,6 @@ compute_may_aliases (void)
/* Deallocate memory used by aliasing data structures. */
delete_alias_info (ai);
-
- /* Indicate that may-alias information is now available. */
- aliases_computed_p = true;
}
struct tree_opt_pass pass_may_alias =
@@ -365,7 +355,7 @@ struct tree_opt_pass pass_may_alias =
0, /* static_pass_number */
TV_TREE_MAY_ALIAS, /* tv_id */
PROP_cfg | PROP_ssa | PROP_pta, /* properties_required */
- 0, /* properties_provided */
+ PROP_alias, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_dump_func | TODO_rename_vars
@@ -379,6 +369,7 @@ static struct alias_info *
init_alias_info (void)
{
struct alias_info *ai;
+ static bool aliases_computed_p = false;
ai = xcalloc (1, sizeof (struct alias_info));
ai->ssa_names_visited = BITMAP_XMALLOC ();
@@ -417,14 +408,8 @@ init_alias_info (void)
for (i = 0; i < num_referenced_vars; i++)
{
var_ann_t ann = var_ann (referenced_var (i));
-
ann->is_alias_tag = 0;
- if (ann->type_mem_tag)
- {
- var_ann_t tag_ann = var_ann (ann->type_mem_tag);
- tag_ann->may_aliases = NULL;
- bitmap_set_bit (vars_to_rename, tag_ann->uid);
- }
+ ann->may_aliases = NULL;
}
/* Clear flow-sensitive points-to information from each SSA name. */
@@ -450,12 +435,13 @@ init_alias_info (void)
pi->is_dereferenced = 0;
if (pi->pt_vars)
bitmap_clear (pi->pt_vars);
- if (pi->name_mem_tag)
- var_ann (pi->name_mem_tag)->may_aliases = NULL;
}
}
}
+ /* Next time, we will need to reset alias information. */
+ aliases_computed_p = true;
+
return ai;
}
@@ -1375,47 +1361,64 @@ setup_pointers_and_addressables (struct alias_info *ai)
/* Add pointer variables that have been dereferenced to the POINTERS
array and create a type memory tag for them. */
- if (POINTER_TYPE_P (TREE_TYPE (var))
- && (bitmap_bit_p (ai->dereferenced_ptrs_store, v_ann->uid)
- || bitmap_bit_p (ai->dereferenced_ptrs_load, v_ann->uid)))
+ if (POINTER_TYPE_P (TREE_TYPE (var)))
{
- tree tag;
- var_ann_t t_ann;
-
- /* If pointer VAR still doesn't have a memory tag associated
- with it, create it now or re-use an existing one. */
- tag = get_tmt_for (var, ai);
- t_ann = var_ann (tag);
-
- /* The type tag will need to be renamed into SSA afterwards.
- Note that we cannot do this inside get_tmt_for because
- aliasing may run multiple times and we only create type
- tags the first time. */
- bitmap_set_bit (vars_to_rename, t_ann->uid);
-
- /* Associate the tag with pointer VAR. */
- v_ann->type_mem_tag = tag;
-
- /* If pointer VAR has been used in a store operation, then its
- memory tag must be marked as written-to. */
- if (bitmap_bit_p (ai->dereferenced_ptrs_store, v_ann->uid))
- bitmap_set_bit (ai->written_vars, t_ann->uid);
-
- /* If pointer VAR is a global variable or a PARM_DECL, then its
- memory tag should be considered a global variable. */
- if (TREE_CODE (var) == PARM_DECL || needs_to_live_in_memory (var))
- mark_call_clobbered (tag);
-
- /* All the dereferences of pointer VAR count as references of
- TAG. Since TAG can be associated with several pointers, add
- the dereferences of VAR to the TAG. We may need to grow
- AI->NUM_REFERENCES because we have been adding name and
- type tags. */
- if (t_ann->uid >= VARRAY_SIZE (ai->num_references))
- VARRAY_GROW (ai->num_references, t_ann->uid + 10);
-
- VARRAY_UINT (ai->num_references, t_ann->uid)
- += VARRAY_UINT (ai->num_references, v_ann->uid);
+ if ((bitmap_bit_p (ai->dereferenced_ptrs_store, v_ann->uid)
+ || bitmap_bit_p (ai->dereferenced_ptrs_load, v_ann->uid)))
+ {
+ tree tag;
+ var_ann_t t_ann;
+
+ /* If pointer VAR still doesn't have a memory tag
+ associated with it, create it now or re-use an
+ existing one. */
+ tag = get_tmt_for (var, ai);
+ t_ann = var_ann (tag);
+
+ /* The type tag will need to be renamed into SSA
+ afterwards. Note that we cannot do this inside
+ get_tmt_for because aliasing may run multiple times
+ and we only create type tags the first time. */
+ bitmap_set_bit (vars_to_rename, t_ann->uid);
+
+ /* Associate the tag with pointer VAR. */
+ v_ann->type_mem_tag = tag;
+
+ /* If pointer VAR has been used in a store operation,
+ then its memory tag must be marked as written-to. */
+ if (bitmap_bit_p (ai->dereferenced_ptrs_store, v_ann->uid))
+ bitmap_set_bit (ai->written_vars, t_ann->uid);
+
+ /* If pointer VAR is a global variable or a PARM_DECL,
+ then its memory tag should be considered a global
+ variable. */
+ if (TREE_CODE (var) == PARM_DECL || needs_to_live_in_memory (var))
+ mark_call_clobbered (tag);
+
+ /* All the dereferences of pointer VAR count as
+ references of TAG. Since TAG can be associated with
+ several pointers, add the dereferences of VAR to the
+ TAG. We may need to grow AI->NUM_REFERENCES because
+ we have been adding name and type tags. */
+ if (t_ann->uid >= VARRAY_SIZE (ai->num_references))
+ VARRAY_GROW (ai->num_references, t_ann->uid + 10);
+
+ VARRAY_UINT (ai->num_references, t_ann->uid)
+ += VARRAY_UINT (ai->num_references, v_ann->uid);
+ }
+ else
+ {
+ /* The pointer has not been dereferenced. If it had a
+ type memory tag, remove it and mark the old tag for
+ renaming to remove it out of the IL. */
+ var_ann_t ann = var_ann (var);
+ tree tag = ann->type_mem_tag;
+ if (tag)
+ {
+ bitmap_set_bit (vars_to_rename, var_ann (tag)->uid);
+ ann->type_mem_tag = NULL_TREE;
+ }
+ }
}
}
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 04ab19d8ff6..82479f052e6 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -245,7 +245,7 @@ struct tree_opt_pass pass_ccp =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_CCP, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
@@ -2704,7 +2704,7 @@ struct tree_opt_pass pass_fold_builtins =
NULL, /* next */
0, /* static_pass_number */
0, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-copyrename.c b/gcc/tree-ssa-copyrename.c
index ac7c00aa06e..2fd87e2214b 100644
--- a/gcc/tree-ssa-copyrename.c
+++ b/gcc/tree-ssa-copyrename.c
@@ -391,7 +391,7 @@ struct tree_opt_pass pass_rename_ssa_copies =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_COPY_RENAME, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c
index 1d3038fc60c..c94a2f6c6d6 100644
--- a/gcc/tree-ssa-dce.c
+++ b/gcc/tree-ssa-dce.c
@@ -908,7 +908,7 @@ struct tree_opt_pass pass_dce =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_DCE, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
@@ -924,7 +924,7 @@ struct tree_opt_pass pass_cd_dce =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_CD_DCE, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index 7382d5f8875..036706f9f37 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -692,7 +692,7 @@ struct tree_opt_pass pass_dominator =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_SSA_DOMINATOR_OPTS, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
index efc7d7fbef4..26aae0cb143 100644
--- a/gcc/tree-ssa-dse.c
+++ b/gcc/tree-ssa-dse.c
@@ -437,7 +437,8 @@ struct tree_opt_pass pass_dse = {
NULL, /* next */
0, /* static_pass_number */
TV_TREE_DSE, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa
+ | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 7df513f4e8a..2cb3b9bd20b 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -517,7 +517,8 @@ struct tree_opt_pass pass_forwprop = {
NULL, /* next */
0, /* static_pass_number */
TV_TREE_FORWPROP, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa
+ | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c
index 5794a86cd6c..ddb2438bae7 100644
--- a/gcc/tree-ssa-loop-ch.c
+++ b/gcc/tree-ssa-loop-ch.c
@@ -340,7 +340,7 @@ struct tree_opt_pass pass_ch =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_CH, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index bd80da33341..a9e864ed8c1 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -1137,13 +1137,6 @@ get_asm_expr_operands (tree stmt, voperands_t prev_vops)
add_stmt_operand (&var, stmt, opf_is_def, prev_vops);
});
- /* If we don't have call-clobbered nor addressable vars and we
- still have not computed aliasing information, just mark the
- statement as having volatile operands. If the alias pass
- finds some, we will add them at that point. */
- if (!aliases_computed_p)
- stmt_ann (stmt)->has_volatile_ops = true;
-
break;
}
}
@@ -1159,53 +1152,42 @@ get_indirect_ref_operands (tree stmt, tree expr, int flags,
if (SSA_VAR_P (ptr))
{
- if (!aliases_computed_p)
+ struct ptr_info_def *pi = NULL;
+
+ /* If PTR has flow-sensitive points-to information, use it. */
+ if (TREE_CODE (ptr) == SSA_NAME
+ && (pi = SSA_NAME_PTR_INFO (ptr)) != NULL
+ && pi->name_mem_tag)
{
- /* If the pointer does not have a memory tag and aliases have not
- been computed yet, mark the statement as having volatile
- operands to prevent DOM from entering it in equivalence tables
- and DCE from killing it. */
- stmt_ann (stmt)->has_volatile_ops = true;
+ /* PTR has its own memory tag. Use it. */
+ add_stmt_operand (&pi->name_mem_tag, stmt, flags, prev_vops);
}
else
{
- struct ptr_info_def *pi = NULL;
-
- /* If we have computed aliasing already, check if PTR has
- flow-sensitive points-to information. */
- if (TREE_CODE (ptr) == SSA_NAME
- && (pi = SSA_NAME_PTR_INFO (ptr)) != NULL
- && pi->name_mem_tag)
+ /* If PTR is not an SSA_NAME or it doesn't have a name
+ tag, use its type memory tag. */
+ var_ann_t ann;
+
+ /* If we are emitting debugging dumps, display a warning if
+ PTR is an SSA_NAME with no flow-sensitive alias
+ information. That means that we may need to compute
+ aliasing again. */
+ if (dump_file
+ && TREE_CODE (ptr) == SSA_NAME
+ && pi == NULL)
{
- /* PTR has its own memory tag. Use it. */
- add_stmt_operand (&pi->name_mem_tag, stmt, flags, prev_vops);
+ fprintf (dump_file,
+ "NOTE: no flow-sensitive alias info for ");
+ print_generic_expr (dump_file, ptr, dump_flags);
+ fprintf (dump_file, " in ");
+ print_generic_stmt (dump_file, stmt, dump_flags);
}
- else
- {
- /* If PTR is not an SSA_NAME or it doesn't have a name
- tag, use its type memory tag. */
- var_ann_t ann;
-
- /* If we are emitting debugging dumps, display a warning if
- PTR is an SSA_NAME with no flow-sensitive alias
- information. That means that we may need to compute
- aliasing again. */
- if (dump_file
- && TREE_CODE (ptr) == SSA_NAME
- && pi == NULL)
- {
- fprintf (dump_file,
- "NOTE: no flow-sensitive alias info for ");
- print_generic_expr (dump_file, ptr, dump_flags);
- fprintf (dump_file, " in ");
- print_generic_stmt (dump_file, stmt, dump_flags);
- }
- if (TREE_CODE (ptr) == SSA_NAME)
- ptr = SSA_NAME_VAR (ptr);
- ann = var_ann (ptr);
- add_stmt_operand (&ann->type_mem_tag, stmt, flags, prev_vops);
- }
+ if (TREE_CODE (ptr) == SSA_NAME)
+ ptr = SSA_NAME_VAR (ptr);
+ ann = var_ann (ptr);
+ if (ann->type_mem_tag)
+ add_stmt_operand (&ann->type_mem_tag, stmt, flags, prev_vops);
}
}
@@ -1272,8 +1254,6 @@ get_call_expr_operands (tree stmt, tree expr, voperands_t prev_vops)
else if (!(call_flags & (ECF_CONST | ECF_NORETURN)))
add_call_read_ops (stmt, prev_vops);
}
- else if (!aliases_computed_p)
- stmt_ann (stmt)->has_volatile_ops = true;
}
@@ -1348,13 +1328,6 @@ add_stmt_operand (tree *var_p, tree stmt, int flags, voperands_t prev_vops)
aliases = v_ann->may_aliases;
- /* If alias information hasn't been computed yet, then
- addressable variables will not be an alias tag nor will they
- have aliases. In this case, mark the statement as having
- volatile operands. */
- if (!aliases_computed_p && may_be_aliased (var))
- s_ann->has_volatile_ops = true;
-
if (aliases == NULL)
{
/* The variable is not aliased or it is an alias tag. */
diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c
index 50c845e7637..ee48b25b214 100644
--- a/gcc/tree-ssa-phiopt.c
+++ b/gcc/tree-ssa-phiopt.c
@@ -669,7 +669,7 @@ struct tree_opt_pass pass_phiopt =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_PHIOPT, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index d24ebc0b547..95ee573aa1a 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -2076,7 +2076,8 @@ struct tree_opt_pass pass_pre =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_PRE, /* tv_id */
- PROP_no_crit_edges | PROP_cfg | PROP_ssa,/* properties_required */
+ PROP_no_crit_edges | PROP_cfg
+ | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
@@ -2107,7 +2108,7 @@ struct tree_opt_pass pass_fre =
NULL, /* next */
0, /* static_pass_number */
TV_TREE_FRE, /* tv_id */
- PROP_no_crit_edges | PROP_cfg | PROP_ssa,/* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 27b3a5b1bf0..52df86937e0 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -505,11 +505,8 @@ err:
static void
verify_alias_info (void)
{
- if (aliases_computed_p)
- {
- verify_flow_sensitive_alias_info ();
- verify_flow_insensitive_alias_info ();
- }
+ verify_flow_sensitive_alias_info ();
+ verify_flow_insensitive_alias_info ();
}
@@ -677,7 +674,6 @@ init_tree_ssa (void)
init_ssanames ();
init_phinodes ();
global_var = NULL_TREE;
- aliases_computed_p = false;
}
@@ -710,7 +706,6 @@ delete_tree_ssa (void)
global_var = NULL_TREE;
BITMAP_XFREE (call_clobbered_vars);
call_clobbered_vars = NULL;
- aliases_computed_p = false;
BITMAP_XFREE (addressable_vars);
addressable_vars = NULL;
}
@@ -1211,7 +1206,7 @@ struct tree_opt_pass pass_redundant_phi =
NULL, /* next */
0, /* static_pass_number */
0, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c
index d3d48f5a89b..6599cbd09e2 100644
--- a/gcc/tree-tailcall.c
+++ b/gcc/tree-tailcall.c
@@ -937,7 +937,7 @@ struct tree_opt_pass pass_tail_recursion =
NULL, /* next */
0, /* static_pass_number */
0, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
@@ -953,7 +953,7 @@ struct tree_opt_pass pass_tail_calls =
NULL, /* next */
0, /* static_pass_number */
0, /* tv_id */
- PROP_cfg | PROP_ssa, /* properties_required */
+ PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */