diff options
Diffstat (limited to 'gcc/passes.c')
-rw-r--r-- | gcc/passes.c | 74 |
1 files changed, 39 insertions, 35 deletions
diff --git a/gcc/passes.c b/gcc/passes.c index bec473a0670..833bdbd0134 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -104,7 +104,7 @@ along with GCC; see the file COPYING3. If not see /* This is used for debugging. It allows the current pass to printed from anywhere in compilation. */ -struct tree_opt_pass *current_pass; +struct opt_pass *current_pass; /* Call from anywhere to find out what pass this is. Useful for printing out debugging information deep inside an service @@ -246,19 +246,19 @@ finish_optimization_passes (void) timevar_push (TV_DUMP); if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities) { - dump_file = dump_begin (pass_profile.static_pass_number, NULL); + dump_file = dump_begin (pass_profile.pass.static_pass_number, NULL); end_branch_prob (); if (dump_file) - dump_end (pass_profile.static_pass_number, dump_file); + dump_end (pass_profile.pass.static_pass_number, dump_file); } if (optimize > 0) { - dump_file = dump_begin (pass_combine.static_pass_number, NULL); + dump_file = dump_begin (pass_combine.pass.static_pass_number, NULL); if (dump_file) { dump_combine_total_stats (dump_file); - dump_end (pass_combine.static_pass_number, dump_file); + dump_end (pass_combine.pass.static_pass_number, dump_file); } } @@ -284,8 +284,10 @@ gate_rest_of_compilation (void) return !(rtl_dump_and_exit || flag_syntax_only || errorcount || sorrycount); } -struct tree_opt_pass pass_rest_of_compilation = +struct gimple_opt_pass pass_rest_of_compilation = { + { + GIMPLE_PASS, NULL, /* name */ gate_rest_of_compilation, /* gate */ NULL, /* execute */ @@ -297,8 +299,8 @@ struct tree_opt_pass pass_rest_of_compilation = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_ggc_collect, /* todo_flags_finish */ - 0 /* letter */ + TODO_ggc_collect /* todo_flags_finish */ + } }; static bool @@ -307,8 +309,10 @@ gate_postreload (void) return reload_completed; } -struct tree_opt_pass pass_postreload = +struct rtl_opt_pass pass_postreload = { + { + RTL_PASS, NULL, /* name */ gate_postreload, /* gate */ NULL, /* execute */ @@ -320,21 +324,21 @@ struct tree_opt_pass pass_postreload = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_ggc_collect | TODO_verify_rtl_sharing, /* todo_flags_finish */ - 0 /* letter */ + TODO_ggc_collect | TODO_verify_rtl_sharing /* todo_flags_finish */ + } }; /* The root of the compilation pass tree, once constructed. */ -struct tree_opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes; +struct opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes; /* Iterate over the pass tree allocating dump file numbers. We want to do this depth first, and independent of whether the pass is enabled or not. */ static void -register_one_dump_file (struct tree_opt_pass *pass, bool ipa, int properties) +register_one_dump_file (struct opt_pass *pass, bool ipa, int properties) { char *dot_name, *flag_name, *glob_name; const char *prefix; @@ -358,13 +362,13 @@ register_one_dump_file (struct tree_opt_pass *pass, bool ipa, int properties) flag_name = concat (prefix, pass->name, num, NULL); glob_name = concat (prefix, pass->name, NULL); pass->static_pass_number = dump_register (dot_name, flag_name, glob_name, - flags, pass->letter); + flags); } /* Recursive worker function for register_dump_files. */ static int -register_dump_files_1 (struct tree_opt_pass *pass, bool ipa, int properties) +register_dump_files_1 (struct opt_pass *pass, bool ipa, int properties) { do { @@ -398,7 +402,7 @@ register_dump_files_1 (struct tree_opt_pass *pass, bool ipa, int properties) the pipeline. */ static void -register_dump_files (struct tree_opt_pass *pass, bool ipa, int properties) +register_dump_files (struct opt_pass *pass, bool ipa, int properties) { pass->properties_required |= properties; register_dump_files_1 (pass, ipa, properties); @@ -407,14 +411,14 @@ register_dump_files (struct tree_opt_pass *pass, bool ipa, int properties) /* Add a pass to the pass list. Duplicate the pass if it's already in the list. */ -static struct tree_opt_pass ** -next_pass_1 (struct tree_opt_pass **list, struct tree_opt_pass *pass) +static struct opt_pass ** +next_pass_1 (struct opt_pass **list, struct opt_pass *pass) { /* A nonzero static_pass_number indicates that the pass is already in the list. */ if (pass->static_pass_number) { - struct tree_opt_pass *new; + struct opt_pass *new; new = xmalloc (sizeof (*new)); memcpy (new, pass, sizeof (*new)); @@ -467,9 +471,9 @@ next_pass_1 (struct tree_opt_pass **list, struct tree_opt_pass *pass) void init_optimization_passes (void) { - struct tree_opt_pass **p; + struct opt_pass **p; -#define NEXT_PASS(PASS) (p = next_pass_1 (p, &PASS)) +#define NEXT_PASS(PASS) (p = next_pass_1 (p, &((PASS).pass))) /* All passes needed to lower the function into shape optimizers can operate on. These passes are always run first on the function, but @@ -497,21 +501,21 @@ init_optimization_passes (void) NEXT_PASS (pass_ipa_function_and_variable_visibility); NEXT_PASS (pass_ipa_early_inline); { - struct tree_opt_pass **p = &pass_ipa_early_inline.sub; + struct opt_pass **p = &pass_ipa_early_inline.pass.sub; NEXT_PASS (pass_early_inline); NEXT_PASS (pass_inline_parameters); NEXT_PASS (pass_rebuild_cgraph_edges); } NEXT_PASS (pass_early_local_passes); { - struct tree_opt_pass **p = &pass_early_local_passes.sub; + struct opt_pass **p = &pass_early_local_passes.pass.sub; NEXT_PASS (pass_tree_profile); NEXT_PASS (pass_cleanup_cfg); NEXT_PASS (pass_init_datastructures); NEXT_PASS (pass_expand_omp); NEXT_PASS (pass_all_early_optimizations); { - struct tree_opt_pass **p = &pass_all_early_optimizations.sub; + struct opt_pass **p = &pass_all_early_optimizations.pass.sub; NEXT_PASS (pass_referenced_vars); NEXT_PASS (pass_reset_cc_flags); NEXT_PASS (pass_build_ssa); @@ -555,7 +559,7 @@ init_optimization_passes (void) NEXT_PASS (pass_apply_inline); NEXT_PASS (pass_all_optimizations); { - struct tree_opt_pass **p = &pass_all_optimizations.sub; + struct opt_pass **p = &pass_all_optimizations.pass.sub; NEXT_PASS (pass_create_structure_vars); /* ??? pass_build_alias is a dummy pass that ensures that we execute TODO_rebuild_alias at this point even if @@ -614,7 +618,7 @@ init_optimization_passes (void) NEXT_PASS (pass_sink_code); NEXT_PASS (pass_tree_loop); { - struct tree_opt_pass **p = &pass_tree_loop.sub; + struct opt_pass **p = &pass_tree_loop.pass.sub; NEXT_PASS (pass_tree_loop_init); NEXT_PASS (pass_copy_prop); NEXT_PASS (pass_dce_loop); @@ -631,7 +635,7 @@ init_optimization_passes (void) NEXT_PASS (pass_if_conversion); NEXT_PASS (pass_vectorize); { - struct tree_opt_pass **p = &pass_vectorize.sub; + struct opt_pass **p = &pass_vectorize.pass.sub; NEXT_PASS (pass_lower_vector_ssa); NEXT_PASS (pass_dce_loop); } @@ -685,7 +689,7 @@ init_optimization_passes (void) NEXT_PASS (pass_expand); NEXT_PASS (pass_rest_of_compilation); { - struct tree_opt_pass **p = &pass_rest_of_compilation.sub; + struct opt_pass **p = &pass_rest_of_compilation.pass.sub; NEXT_PASS (pass_init_function); NEXT_PASS (pass_jump); NEXT_PASS (pass_rtl_eh); @@ -705,7 +709,7 @@ init_optimization_passes (void) efficiently. */ NEXT_PASS (pass_loop2); { - struct tree_opt_pass **p = &pass_loop2.sub; + struct opt_pass **p = &pass_loop2.pass.sub; NEXT_PASS (pass_rtl_loop_init); NEXT_PASS (pass_rtl_move_loop_invariants); NEXT_PASS (pass_rtl_unswitch); @@ -743,7 +747,7 @@ init_optimization_passes (void) NEXT_PASS (pass_subregs_of_mode_finish); NEXT_PASS (pass_postreload); { - struct tree_opt_pass **p = &pass_postreload.sub; + struct opt_pass **p = &pass_postreload.pass.sub; NEXT_PASS (pass_postreload_cse); NEXT_PASS (pass_gcse2); NEXT_PASS (pass_split_after_reload); @@ -764,7 +768,7 @@ init_optimization_passes (void) NEXT_PASS (pass_sched2); NEXT_PASS (pass_stack_regs); { - struct tree_opt_pass **p = &pass_stack_regs.sub; + struct opt_pass **p = &pass_stack_regs.pass.sub; NEXT_PASS (pass_split_before_regstack); NEXT_PASS (pass_stack_regs_run); } @@ -1056,13 +1060,13 @@ verify_curr_properties (void *data) static void update_properties_after_pass (void *data) { - struct tree_opt_pass *pass = data; + struct opt_pass *pass = data; cfun->curr_properties = (cfun->curr_properties | pass->properties_provided) & ~pass->properties_destroyed; } static bool -execute_one_pass (struct tree_opt_pass *pass) +execute_one_pass (struct opt_pass *pass) { bool initializing_dump; unsigned int todo_after = 0; @@ -1169,7 +1173,7 @@ execute_one_pass (struct tree_opt_pass *pass) } void -execute_pass_list (struct tree_opt_pass *pass) +execute_pass_list (struct opt_pass *pass) { do { @@ -1183,7 +1187,7 @@ execute_pass_list (struct tree_opt_pass *pass) /* Same as execute_pass_list but assume that subpasses of IPA passes are local passes. */ void -execute_ipa_pass_list (struct tree_opt_pass *pass) +execute_ipa_pass_list (struct opt_pass *pass) { do { |