gcc-8.3/gcc/execute_one_pass()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#uf594009]
#backlinks
*説明 [#j54ee3b3]
-パス: [[gcc-8.3/gcc/passes.c]]
-FIXME: これは何?
--説明
**引数 [#z5bea542]
-opt_pass *pass
--
--[[gcc-8.3/gcc/opt_pass]]
**返り値 [#bcda9de2]
-bool
--
**参考 [#a2f867b5]
*実装 [#xbdf33d0]
/* Execute PASS. */
bool
execute_one_pass (opt_pass *pass)
{
unsigned int todo_after = 0;
bool gate_status;
/* IPA passes are executed on whole program, so cfun s...
Other passes need function context set. */
if (pass->type == SIMPLE_IPA_PASS || pass->type == IPA...
gcc_assert (!cfun && !current_function_decl);
else
gcc_assert (cfun && current_function_decl);
-
--[[gcc-8.3/gcc/gcc_assert()]]
current_pass = pass;
/* Check whether gate check should be avoided.
User controls the value of the gate through the par...
gate_status = pass->gate (cfun);
gate_status = override_gate_status (pass, current_func...
-
--[[gcc-8.3/gcc/opt_pass/gate()]]
--[[gcc-8.3/gcc/override_gate_status()]]
/* Override gate with plugin. */
invoke_plugin_callbacks (PLUGIN_OVERRIDE_GATE, &gate_s...
-
--[[gcc-8.3/gcc/invoke_plugin_callbacks()]]
if (!gate_status)
{
/* Run so passes selectively disabling themselves ...
are not miscounted. */
if (profile_report && cfun && (cfun->curr_properti...
{
check_profile_consistency (pass->static_pass_n...
check_profile_consistency (pass->static_pass_n...
}
current_pass = NULL;
return false;
}
-
--[[gcc-8.3/gcc/check_profile_consistency()]]
if (should_skip_pass_p (pass))
{
skip_pass (pass);
return true;
}
-
--[[gcc-8.3/gcc/should_skip_pass_p()]]
--[[gcc-8.3/gcc/skip_pass()]]
/* Pass execution event trigger: useful to identify pa...
executed. */
invoke_plugin_callbacks (PLUGIN_PASS_EXECUTION, pass);
if (!quiet_flag && !cfun)
fprintf (stderr, " <%s>", pass->name ? pass->name : ...
/* Note that the folders should only create gimple exp...
This is a hack until the new folder is ready. */
in_gimple_form = (cfun && (cfun->curr_properties & PRO...
pass_init_dump_file (pass);
-
--[[gcc-8.3/gcc/pass_init_dump_file()]]
/* If a timevar is present, start it. */
if (pass->tv_id != TV_NONE)
timevar_push (pass->tv_id);
-
--[[gcc-8.3/gcc/timevar_push()]]
/* Run pre-pass verification. */
execute_todo (pass->todo_flags_start);
-
--[[gcc-8.3/gcc/execute_todo()]]
if (flag_checking)
do_per_function (verify_curr_properties,
(void *)(size_t)pass->properties_required);
-
--[[gcc-8.3/gcc/do_per_function()]]
/* Do it! */
todo_after = pass->execute (cfun);
-
--パスの本体部分
--[[gcc-8.3/gcc/opt_pass/execute()]]
--[[gcc-8.3/gcc/tips__pass]]
if (todo_after & TODO_discard_function)
{
/* Stop timevar. */
if (pass->tv_id != TV_NONE)
timevar_pop (pass->tv_id);
pass_fini_dump_file (pass);
-
--[[gcc-8.3/gcc/timevar_pop()]]
--[[gcc-8.3/gcc/pass_fini_dump_file()]]
gcc_assert (cfun);
/* As cgraph_node::release_body expects release do...
we have to release it. */
if (dom_info_available_p (CDI_DOMINATORS))
free_dominance_info (CDI_DOMINATORS);
if (dom_info_available_p (CDI_POST_DOMINATORS))
free_dominance_info (CDI_POST_DOMINATORS);
-
--[[gcc-8.3/gcc/free_dominance_info()]]
tree fn = cfun->decl;
pop_cfun ();
gcc_assert (!cfun);
cgraph_node::get (fn)->release_body ();
-
--[[gcc-8.3/gcc/pop_cfun()]]
--[[gcc-8.3/gcc/cgraph_node]]
--[[gcc-8.3/gcc/cgraph_node/get()]]
--[[gcc-8.3/gcc/cgraph_node/release_body()]]
current_pass = NULL;
redirect_edge_var_map_empty ();
ggc_collect ();
-
--[[gcc-8.3/gcc/redirect_edge_var_map_empty()]]
--[[gcc-8.3/gcc/ggc_collect()]]
return true;
}
do_per_function (clear_last_verified, NULL);
do_per_function (update_properties_after_pass, pass);
-
--[[gcc-8.3/gcc/do_per_function()]]
if (profile_report && cfun && (cfun->curr_properties &...
check_profile_consistency (pass->static_pass_number,...
/* Run post-pass cleanup and verification. */
execute_todo (todo_after | pass->todo_flags_finish | T...
if (profile_report && cfun && (cfun->curr_properties &...
check_profile_consistency (pass->static_pass_number,...
verify_interpass_invariants ();
-
--[[gcc-8.3/gcc/verify_interpass_invariants()]]
/* Stop timevar. */
if (pass->tv_id != TV_NONE)
timevar_pop (pass->tv_id);
if (pass->type == IPA_PASS
&& ((ipa_opt_pass_d *)pass)->function_transform)
{
struct cgraph_node *node;
FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
node->ipa_transforms_to_apply.safe_push ((ipa_opt_pass_...
}
else if (dump_file)
do_per_function (execute_function_dump, pass);
-ここでファイルにダンプされる。
--[[gcc-8.3/gcc/ipa_opt_pass_d/function_transform()]]
--[[gcc-8.3/gcc/do_per_function()]]
--[[gcc-8.3/gcc/execute_function_dump()]]
if (!current_function_decl)
symtab->process_new_functions ();
-
--symtab は struct symbol_table *型
---[[gcc-8.3/gcc/symbol_table]]
--[[gcc-8.3/gcc/symtab(global)]]
--[[gcc-8.3/gcc/symbol_table/process_new_functions()]]
pass_fini_dump_file (pass);
if (pass->type != SIMPLE_IPA_PASS && pass->type != IPA...
gcc_assert (!(cfun->curr_properties & PROP_trees)
|| pass->type != RTL_PASS);
current_pass = NULL;
redirect_edge_var_map_empty ();
-
--[[gcc-8.3/gcc/redirect_edge_var_map_empty()]]
/* Signal this is a suitable GC collection point. */
if (!((todo_after | pass->todo_flags_finish) & TODO_do...
ggc_collect ();
return true;
}
*コメント [#fdce3d33]
終了行:
*参照元 [#uf594009]
#backlinks
*説明 [#j54ee3b3]
-パス: [[gcc-8.3/gcc/passes.c]]
-FIXME: これは何?
--説明
**引数 [#z5bea542]
-opt_pass *pass
--
--[[gcc-8.3/gcc/opt_pass]]
**返り値 [#bcda9de2]
-bool
--
**参考 [#a2f867b5]
*実装 [#xbdf33d0]
/* Execute PASS. */
bool
execute_one_pass (opt_pass *pass)
{
unsigned int todo_after = 0;
bool gate_status;
/* IPA passes are executed on whole program, so cfun s...
Other passes need function context set. */
if (pass->type == SIMPLE_IPA_PASS || pass->type == IPA...
gcc_assert (!cfun && !current_function_decl);
else
gcc_assert (cfun && current_function_decl);
-
--[[gcc-8.3/gcc/gcc_assert()]]
current_pass = pass;
/* Check whether gate check should be avoided.
User controls the value of the gate through the par...
gate_status = pass->gate (cfun);
gate_status = override_gate_status (pass, current_func...
-
--[[gcc-8.3/gcc/opt_pass/gate()]]
--[[gcc-8.3/gcc/override_gate_status()]]
/* Override gate with plugin. */
invoke_plugin_callbacks (PLUGIN_OVERRIDE_GATE, &gate_s...
-
--[[gcc-8.3/gcc/invoke_plugin_callbacks()]]
if (!gate_status)
{
/* Run so passes selectively disabling themselves ...
are not miscounted. */
if (profile_report && cfun && (cfun->curr_properti...
{
check_profile_consistency (pass->static_pass_n...
check_profile_consistency (pass->static_pass_n...
}
current_pass = NULL;
return false;
}
-
--[[gcc-8.3/gcc/check_profile_consistency()]]
if (should_skip_pass_p (pass))
{
skip_pass (pass);
return true;
}
-
--[[gcc-8.3/gcc/should_skip_pass_p()]]
--[[gcc-8.3/gcc/skip_pass()]]
/* Pass execution event trigger: useful to identify pa...
executed. */
invoke_plugin_callbacks (PLUGIN_PASS_EXECUTION, pass);
if (!quiet_flag && !cfun)
fprintf (stderr, " <%s>", pass->name ? pass->name : ...
/* Note that the folders should only create gimple exp...
This is a hack until the new folder is ready. */
in_gimple_form = (cfun && (cfun->curr_properties & PRO...
pass_init_dump_file (pass);
-
--[[gcc-8.3/gcc/pass_init_dump_file()]]
/* If a timevar is present, start it. */
if (pass->tv_id != TV_NONE)
timevar_push (pass->tv_id);
-
--[[gcc-8.3/gcc/timevar_push()]]
/* Run pre-pass verification. */
execute_todo (pass->todo_flags_start);
-
--[[gcc-8.3/gcc/execute_todo()]]
if (flag_checking)
do_per_function (verify_curr_properties,
(void *)(size_t)pass->properties_required);
-
--[[gcc-8.3/gcc/do_per_function()]]
/* Do it! */
todo_after = pass->execute (cfun);
-
--パスの本体部分
--[[gcc-8.3/gcc/opt_pass/execute()]]
--[[gcc-8.3/gcc/tips__pass]]
if (todo_after & TODO_discard_function)
{
/* Stop timevar. */
if (pass->tv_id != TV_NONE)
timevar_pop (pass->tv_id);
pass_fini_dump_file (pass);
-
--[[gcc-8.3/gcc/timevar_pop()]]
--[[gcc-8.3/gcc/pass_fini_dump_file()]]
gcc_assert (cfun);
/* As cgraph_node::release_body expects release do...
we have to release it. */
if (dom_info_available_p (CDI_DOMINATORS))
free_dominance_info (CDI_DOMINATORS);
if (dom_info_available_p (CDI_POST_DOMINATORS))
free_dominance_info (CDI_POST_DOMINATORS);
-
--[[gcc-8.3/gcc/free_dominance_info()]]
tree fn = cfun->decl;
pop_cfun ();
gcc_assert (!cfun);
cgraph_node::get (fn)->release_body ();
-
--[[gcc-8.3/gcc/pop_cfun()]]
--[[gcc-8.3/gcc/cgraph_node]]
--[[gcc-8.3/gcc/cgraph_node/get()]]
--[[gcc-8.3/gcc/cgraph_node/release_body()]]
current_pass = NULL;
redirect_edge_var_map_empty ();
ggc_collect ();
-
--[[gcc-8.3/gcc/redirect_edge_var_map_empty()]]
--[[gcc-8.3/gcc/ggc_collect()]]
return true;
}
do_per_function (clear_last_verified, NULL);
do_per_function (update_properties_after_pass, pass);
-
--[[gcc-8.3/gcc/do_per_function()]]
if (profile_report && cfun && (cfun->curr_properties &...
check_profile_consistency (pass->static_pass_number,...
/* Run post-pass cleanup and verification. */
execute_todo (todo_after | pass->todo_flags_finish | T...
if (profile_report && cfun && (cfun->curr_properties &...
check_profile_consistency (pass->static_pass_number,...
verify_interpass_invariants ();
-
--[[gcc-8.3/gcc/verify_interpass_invariants()]]
/* Stop timevar. */
if (pass->tv_id != TV_NONE)
timevar_pop (pass->tv_id);
if (pass->type == IPA_PASS
&& ((ipa_opt_pass_d *)pass)->function_transform)
{
struct cgraph_node *node;
FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
node->ipa_transforms_to_apply.safe_push ((ipa_opt_pass_...
}
else if (dump_file)
do_per_function (execute_function_dump, pass);
-ここでファイルにダンプされる。
--[[gcc-8.3/gcc/ipa_opt_pass_d/function_transform()]]
--[[gcc-8.3/gcc/do_per_function()]]
--[[gcc-8.3/gcc/execute_function_dump()]]
if (!current_function_decl)
symtab->process_new_functions ();
-
--symtab は struct symbol_table *型
---[[gcc-8.3/gcc/symbol_table]]
--[[gcc-8.3/gcc/symtab(global)]]
--[[gcc-8.3/gcc/symbol_table/process_new_functions()]]
pass_fini_dump_file (pass);
if (pass->type != SIMPLE_IPA_PASS && pass->type != IPA...
gcc_assert (!(cfun->curr_properties & PROP_trees)
|| pass->type != RTL_PASS);
current_pass = NULL;
redirect_edge_var_map_empty ();
-
--[[gcc-8.3/gcc/redirect_edge_var_map_empty()]]
/* Signal this is a suitable GC collection point. */
if (!((todo_after | pass->todo_flags_finish) & TODO_do...
ggc_collect ();
return true;
}
*コメント [#fdce3d33]
ページ名: