diff options
-rw-r--r-- | gcc/ChangeLog | 26 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 38 | ||||
-rw-r--r-- | gcc/omp-simd-clone.c | 8 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 8 | ||||
-rw-r--r-- | gcc/tree-into-ssa.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-alias.c | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 15 | ||||
-rw-r--r-- | gcc/tree-ssa-coalesce.c | 22 | ||||
-rw-r--r-- | gcc/tree-ssa-copy.c | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-operands.c | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 50 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 10 | ||||
-rw-r--r-- | gcc/tree-ssa-ter.c | 11 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 30 | ||||
-rw-r--r-- | gcc/tree-ssanames.h | 4 |
16 files changed, 136 insertions, 132 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b39906..4585076 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,29 @@ +2016-09-15 Kugan Vivekanandarajah <kuganv@linaro.org> + + * tree-ssanames.h (FOR_EACH_SSA_NAME): New. + * cfgexpand.c (update_alias_info_with_stack_vars): Use + FOR_EACH_SSA_NAME to iterate over SSA variables. + (pass_expand::execute): Likewise. + * omp-simd-clone.c (ipa_simd_modify_function_body): Likewise. + * tree-cfg.c (dump_function_to_file): Likewise. + * tree-into-ssa.c (pass_build_ssa::execute): Likewise. + (update_ssa): Likewise. + * tree-ssa-alias.c (dump_alias_info): Likewise. + * tree-ssa-ccp.c (ccp_finalize): Likewise. + * tree-ssa-coalesce.c (build_ssa_conflict_graph): Likewise. + (create_outofssa_var_map): Likewise. + (coalesce_ssa_name): Likewise. + * tree-ssa-operands.c (dump_immediate_uses): Likewise. + * tree-ssa-pre.c (compute_avail): Likewise. + * tree-ssa-sccvn.c (init_scc_vn): Likewise. + (scc_vn_restore_ssa_info): Likewise. + (free_scc_vn): Likwise. + (run_scc_vn): Likewise. + * tree-ssa-structalias.c (compute_points_to_sets): Likewise. + * tree-ssa-ter.c (new_temp_expr_table): Likewise. + * tree-ssa-copy.c (fini_copy_prop): Likewise. + * tree-ssa.c (verify_ssa): Likewise. + 2016-09-14 Matthew Fortune <matthew.fortune@imgtec.com> * config.gcc (mips*-mti-elf*, mips*-mti-linux*): Set mips32r2 diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 130a16b..dfa301d 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -815,16 +815,15 @@ update_alias_info_with_stack_vars (void) if (decls_to_partitions) { unsigned i; + tree name; hash_set<bitmap> visited; bitmap temp = BITMAP_ALLOC (&stack_var_bitmap_obstack); - for (i = 1; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); struct ptr_info_def *pi; - if (name - && POINTER_TYPE_P (TREE_TYPE (name)) + if (POINTER_TYPE_P (TREE_TYPE (name)) && ((pi = SSA_NAME_PTR_INFO (name)) != NULL)) add_partitioned_vars_to_ptset (&pi->pt, decls_to_partitions, &visited, temp); @@ -6270,16 +6269,15 @@ pass_expand::execute (function *fun) /* Now propagate the RTL assignment of each partition to the underlying var of each SSA_NAME. */ - for (i = 1; i < num_ssa_names; i++) - { - tree name = ssa_name (i); + tree name; - if (!name - /* We might have generated new SSA names in - update_alias_info_with_stack_vars. They will have a NULL - defining statements, and won't be part of the partitioning, - so ignore those. */ - || !SSA_NAME_DEF_STMT (name)) + FOR_EACH_SSA_NAME (i, name, cfun) + { + /* We might have generated new SSA names in + update_alias_info_with_stack_vars. They will have a NULL + defining statements, and won't be part of the partitioning, + so ignore those. */ + if (!SSA_NAME_DEF_STMT (name)) continue; adjust_one_expanded_partition_var (name); @@ -6288,17 +6286,15 @@ pass_expand::execute (function *fun) /* Clean up RTL of variables that straddle across multiple partitions, and check that the rtl of any PARM_DECLs that are not cleaned up is that of their default defs. */ - for (i = 1; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); int part; - if (!name - /* We might have generated new SSA names in - update_alias_info_with_stack_vars. They will have a NULL - defining statements, and won't be part of the partitioning, - so ignore those. */ - || !SSA_NAME_DEF_STMT (name)) + /* We might have generated new SSA names in + update_alias_info_with_stack_vars. They will have a NULL + defining statements, and won't be part of the partitioning, + so ignore those. */ + if (!SSA_NAME_DEF_STMT (name)) continue; part = var_to_partition (SA.map, name); if (part == NO_PARTITION) diff --git a/gcc/omp-simd-clone.c b/gcc/omp-simd-clone.c index c418440c..df140d4 100644 --- a/gcc/omp-simd-clone.c +++ b/gcc/omp-simd-clone.c @@ -931,11 +931,11 @@ ipa_simd_modify_function_body (struct cgraph_node *node, } l = adjustments.length (); - for (i = 1; i < num_ssa_names; i++) + tree name; + + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - if (name - && SSA_NAME_VAR (name) + if (SSA_NAME_VAR (name) && TREE_CODE (SSA_NAME_VAR (name)) == PARM_DECL) { for (j = 0; j < l; j++) diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 57c8410..badbd96 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -7581,11 +7581,13 @@ dump_function_to_file (tree fndecl, FILE *file, int flags) any_var = true; } + + tree name; + if (gimple_in_ssa_p (cfun)) - for (ix = 1; ix < num_ssa_names; ++ix) + FOR_EACH_SSA_NAME (ix, name, cfun) { - tree name = ssa_name (ix); - if (name && !SSA_NAME_VAR (name)) + if (!SSA_NAME_VAR (name)) { fprintf (file, " "); print_generic_expr (file, TREE_TYPE (name), flags); diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index ceafa68..a4ff608 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -2341,7 +2341,6 @@ pass_build_ssa::execute (function *fun) { bitmap_head *dfs; basic_block bb; - unsigned i; /* Initialize operand data structures. */ init_ssa_operands (fun); @@ -2385,13 +2384,14 @@ pass_build_ssa::execute (function *fun) /* Try to get rid of all gimplifier generated temporaries by making its SSA names anonymous. This way we can garbage collect them all after removing unused locals which we do in our TODO. */ - for (i = 1; i < num_ssa_names; ++i) + unsigned i; + tree name; + + FOR_EACH_SSA_NAME (i, name, cfun) { - tree decl, name = ssa_name (i); - if (!name - || SSA_NAME_IS_DEFAULT_DEF (name)) + if (SSA_NAME_IS_DEFAULT_DEF (name)) continue; - decl = SSA_NAME_VAR (name); + tree decl = SSA_NAME_VAR (name); if (decl && TREE_CODE (decl) == VAR_DECL && !VAR_DECL_IS_VIRTUAL_OPERAND (decl) @@ -3283,12 +3283,12 @@ update_ssa (unsigned update_flags) placement heuristics. */ prepare_block_for_update (start_bb, insert_phi_p); + tree name; + if (flag_checking) - for (i = 1; i < num_ssa_names; ++i) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - if (!name - || virtual_operand_p (name)) + if (virtual_operand_p (name)) continue; /* For all but virtual operands, which do not have SSA names diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 8051a66..30de461 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -450,6 +450,7 @@ void dump_alias_info (FILE *file) { unsigned i; + tree ptr; const char *funcname = lang_hooks.decl_printable_name (current_function_decl, 2); tree var; @@ -471,13 +472,11 @@ dump_alias_info (FILE *file) fprintf (file, "\n\nFlow-insensitive points-to information\n\n"); - for (i = 1; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, ptr, cfun) { - tree ptr = ssa_name (i); struct ptr_info_def *pi; - if (ptr == NULL_TREE - || !POINTER_TYPE_P (TREE_TYPE (ptr)) + if (!POINTER_TYPE_P (TREE_TYPE (ptr)) || SSA_NAME_IN_FREE_LIST (ptr)) continue; diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 9871304..d5a0560 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -898,24 +898,23 @@ ccp_finalize (bool nonzero_p) { bool something_changed; unsigned i; + tree name; do_dbg_cnt (); /* Derive alignment and misalignment information from partially constant pointers in the lattice or nonzero bits from partially constant integers. */ - for (i = 1; i < num_ssa_names; ++i) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); ccp_prop_value_t *val; unsigned int tem, align; - if (!name - || (!POINTER_TYPE_P (TREE_TYPE (name)) - && (!INTEGRAL_TYPE_P (TREE_TYPE (name)) - /* Don't record nonzero bits before IPA to avoid - using too much memory. */ - || !nonzero_p))) + if (!POINTER_TYPE_P (TREE_TYPE (name)) + && (!INTEGRAL_TYPE_P (TREE_TYPE (name)) + /* Don't record nonzero bits before IPA to avoid + using too much memory. */ + || !nonzero_p)) continue; val = get_value (name); diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c index 34c3fa1..01f6c5f 100644 --- a/gcc/tree-ssa-coalesce.c +++ b/gcc/tree-ssa-coalesce.c @@ -955,12 +955,11 @@ build_ssa_conflict_graph (tree_live_info_p liveinfo) if (bb == entry) { unsigned i; - for (i = 1; i < num_ssa_names; i++) - { - tree var = ssa_name (i); + tree var; - if (!var - || !SSA_NAME_IS_DEFAULT_DEF (var) + FOR_EACH_SSA_NAME (i, var, cfun) + { + if (!SSA_NAME_IS_DEFAULT_DEF (var) || !SSA_NAME_VAR (var) || VAR_P (SSA_NAME_VAR (var))) continue; @@ -1261,10 +1260,9 @@ create_outofssa_var_map (coalesce_list *cl, bitmap used_in_copy) /* Now process result decls and live on entry variables for entry into the coalesce list. */ first = NULL_TREE; - for (i = 1; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, var, cfun) { - var = ssa_name (i); - if (var != NULL_TREE && !virtual_operand_p (var)) + if (!virtual_operand_p (var)) { coalesce_with_default (var, cl, used_in_copy); @@ -1806,6 +1804,7 @@ coalesce_ssa_name (void) bitmap used_in_copies = BITMAP_ALLOC (NULL); var_map map; unsigned int i; + tree a; cl = create_coalesce_list (); map = create_outofssa_var_map (cl, used_in_copies); @@ -1817,12 +1816,9 @@ coalesce_ssa_name (void) { hash_table<ssa_name_var_hash> ssa_name_hash (10); - for (i = 1; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, a, cfun) { - tree a = ssa_name (i); - - if (a - && SSA_NAME_VAR (a) + if (SSA_NAME_VAR (a) && !DECL_IGNORED_P (SSA_NAME_VAR (a)) && (!has_zero_uses (a) || !SSA_NAME_IS_DEFAULT_DEF (a) || !VAR_P (SSA_NAME_VAR (a)))) diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c index 3d17926..fcf4fa9 100644 --- a/gcc/tree-ssa-copy.c +++ b/gcc/tree-ssa-copy.c @@ -503,14 +503,13 @@ static bool fini_copy_prop (void) { unsigned i; + tree var; /* Set the final copy-of value for each variable by traversing the copy-of chains. */ - for (i = 1; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, var, cfun) { - tree var = ssa_name (i); - if (!var - || !copy_of[i].value + if (!copy_of[i].value || copy_of[i].value == var) continue; diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index eccea2f..a5c3546 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -1247,11 +1247,8 @@ dump_immediate_uses (FILE *file) unsigned int x; fprintf (file, "Immediate_uses: \n\n"); - for (x = 1; x < num_ssa_names; x++) + FOR_EACH_SSA_NAME (x, var, cfun) { - var = ssa_name (x); - if (!var) - continue; dump_immediate_uses_for (file, var); } } diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index fdb1c2c..67a0513 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3670,15 +3670,14 @@ compute_avail (void) basic_block *worklist; size_t sp = 0; unsigned i; + tree name; /* We pretend that default definitions are defined in the entry block. This includes function arguments and the static chain decl. */ - for (i = 1; i < num_ssa_names; ++i) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); pre_expr e; - if (!name - || !SSA_NAME_IS_DEFAULT_DEF (name) + if (!SSA_NAME_IS_DEFAULT_DEF (name) || has_zero_uses (name) || virtual_operand_p (name)) continue; diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 21b3d56..e120b4f 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -4290,7 +4290,6 @@ free_vn_table (vn_tables_t table) static void init_scc_vn (void) { - size_t i; int j; int *rpo_numbers_temp; @@ -4339,12 +4338,11 @@ init_scc_vn (void) /* Create the VN_INFO structures, and initialize value numbers to TOP or VARYING for parameters. */ - for (i = 1; i < num_ssa_names; i++) - { - tree name = ssa_name (i); - if (!name) - continue; + size_t i; + tree name; + FOR_EACH_SSA_NAME (i, name, cfun) + { VN_INFO_GET (name)->valnum = VN_TOP; VN_INFO (name)->needs_insertion = false; VN_INFO (name)->expr = NULL; @@ -4402,11 +4400,12 @@ init_scc_vn (void) void scc_vn_restore_ssa_info (void) { - for (unsigned i = 0; i < num_ssa_names; i++) + unsigned i; + tree name; + + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - if (name - && has_VN_INFO (name)) + if (has_VN_INFO (name)) { if (VN_INFO (name)->needs_insertion) ; @@ -4428,6 +4427,7 @@ void free_scc_vn (void) { size_t i; + tree name; delete constant_to_value_id; constant_to_value_id = NULL; @@ -4436,11 +4436,9 @@ free_scc_vn (void) shared_lookup_references.release (); XDELETEVEC (rpo_numbers); - for (i = 0; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - if (name - && has_VN_INFO (name) + if (has_VN_INFO (name) && VN_INFO (name)->needs_insertion) release_ssa_name (name); } @@ -4797,13 +4795,11 @@ run_scc_vn (vn_lookup_kind default_vn_walk_kind_) /* Initialize the value ids and prune out remaining VN_TOPs from dead code. */ - for (i = 1; i < num_ssa_names; ++i) + tree name; + + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - vn_ssa_aux_t info; - if (!name) - continue; - info = VN_INFO (name); + vn_ssa_aux_t info = VN_INFO (name); if (!info->visited) info->valnum = name; if (info->valnum == name @@ -4814,13 +4810,9 @@ run_scc_vn (vn_lookup_kind default_vn_walk_kind_) } /* Propagate. */ - for (i = 1; i < num_ssa_names; ++i) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - vn_ssa_aux_t info; - if (!name) - continue; - info = VN_INFO (name); + vn_ssa_aux_t info = VN_INFO (name); if (TREE_CODE (info->valnum) == SSA_NAME && info->valnum != name && info->value_id != VN_INFO (info->valnum)->value_id) @@ -4832,11 +4824,9 @@ run_scc_vn (vn_lookup_kind default_vn_walk_kind_) if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Value numbers:\n"); - for (i = 0; i < num_ssa_names; i++) + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - if (name - && VN_INFO (name)->visited + if (VN_INFO (name)->visited && SSA_VAL (name) != name) { print_generic_expr (dump_file, name, 0); diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index fd96c3a..cbf509b 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -7028,7 +7028,6 @@ static void compute_points_to_sets (void) { basic_block bb; - unsigned i; varinfo_t vi; timevar_push (TV_TREE_PTA); @@ -7077,11 +7076,12 @@ compute_points_to_sets (void) cfun->gimple_df->escaped.escaped = 0; /* Compute the points-to sets for pointer SSA_NAMEs. */ - for (i = 0; i < num_ssa_names; ++i) + unsigned i; + tree ptr; + + FOR_EACH_SSA_NAME (i, ptr, cfun) { - tree ptr = ssa_name (i); - if (ptr - && POINTER_TYPE_P (TREE_TYPE (ptr))) + if (POINTER_TYPE_P (TREE_TYPE (ptr))) find_what_p_points_to (cfun->decl, ptr); } diff --git a/gcc/tree-ssa-ter.c b/gcc/tree-ssa-ter.c index 2a772b2..c7d8b7e 100644 --- a/gcc/tree-ssa-ter.c +++ b/gcc/tree-ssa-ter.c @@ -185,8 +185,6 @@ extern void debug_ter (FILE *, temp_expr_table *); static temp_expr_table * new_temp_expr_table (var_map map) { - unsigned x; - temp_expr_table *t = XNEW (struct temp_expr_table); t->map = map; @@ -201,12 +199,13 @@ new_temp_expr_table (var_map map) t->replaceable_expressions = NULL; t->num_in_part = XCNEWVEC (int, num_var_partitions (map)); - for (x = 1; x < num_ssa_names; x++) + + unsigned x; + tree name; + + FOR_EACH_SSA_NAME (x, name, cfun) { int p; - tree name = ssa_name (x); - if (!name) - continue; p = var_to_partition (map, name); if (p != NO_PARTITION) t->num_in_part[p]++; diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index aae383d..d442a5f 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1005,7 +1005,6 @@ error: DEBUG_FUNCTION void verify_ssa (bool check_modified_stmt, bool check_ssa_operands) { - size_t i; basic_block bb; basic_block *definition_block = XCNEWVEC (basic_block, num_ssa_names); ssa_op_iter iter; @@ -1018,24 +1017,23 @@ verify_ssa (bool check_modified_stmt, bool check_ssa_operands) timevar_push (TV_TREE_SSA_VERIFY); /* Keep track of SSA names present in the IL. */ - for (i = 1; i < num_ssa_names; i++) + size_t i; + tree name; + + FOR_EACH_SSA_NAME (i, name, cfun) { - tree name = ssa_name (i); - if (name) - { - gimple *stmt; - TREE_VISITED (name) = 0; + gimple *stmt; + TREE_VISITED (name) = 0; - verify_ssa_name (name, virtual_operand_p (name)); + verify_ssa_name (name, virtual_operand_p (name)); - stmt = SSA_NAME_DEF_STMT (name); - if (!gimple_nop_p (stmt)) - { - basic_block bb = gimple_bb (stmt); - if (verify_def (bb, definition_block, - name, stmt, virtual_operand_p (name))) - goto err; - } + stmt = SSA_NAME_DEF_STMT (name); + if (!gimple_nop_p (stmt)) + { + basic_block bb = gimple_bb (stmt); + if (verify_def (bb, definition_block, + name, stmt, virtual_operand_p (name))) + goto err; } } diff --git a/gcc/tree-ssanames.h b/gcc/tree-ssanames.h index 8e66ce6..4496e1d 100644 --- a/gcc/tree-ssanames.h +++ b/gcc/tree-ssanames.h @@ -62,6 +62,10 @@ struct GTY ((variable_size)) range_info_def { #define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names)) #define ssa_name(i) ((*cfun->gimple_df->ssa_names)[(i)]) +#define FOR_EACH_SSA_NAME(I, VAR, FN) \ + for (I = 1; SSANAMES (FN)->iterate (I, &VAR); ++I) \ + if (VAR) + /* Sets the value range to SSA. */ extern void set_range_info (tree, enum value_range_type, const wide_int_ref &, const wide_int_ref &); |