gcc-8.3/gcc/expand_gimple_stmt()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#me94cf10]
#backlinks
*説明 [#kc96550e]
-パス: [[gcc-8.3/gcc/cfgexpand.c]]
-FIXME: これは何?
--説明
**引数 [#wb433ef8]
-gimple *stmt
--
--[[gcc-8.3/gcc/gimple]]
**返り値 [#l867af5c]
-rtx_insn *
--
--[[gcc-8.3/gcc/rtx_insn]]
**参考 [#s6208e37]
*実装 [#f5e47a59]
/* Expand one gimple statement STMT and return the last ...
before any of the newly generated ones.
In addition to generating the necessary RTL instructi...
sets REG_EH_REGION notes if necessary and sets the cu...
location for diagnostics. */
static rtx_insn *
expand_gimple_stmt (gimple *stmt)
{
location_t saved_location = input_location;
rtx_insn *last = get_last_insn ();
int lp_nr;
gcc_assert (cfun);
-
--[[gcc-8.3/gcc/location_t]]
--[[gcc-8.3/gcc/get_last_insn()]]
--[[gcc-8.3/gcc/gcc_assert()]]
/* We need to save and restore the current source loca...
discovered during expansion are emitted with the ri...
it would be better if the diagnostic routines used ...
embedded in the tree nodes rather than globals. */
if (gimple_has_location (stmt))
input_location = gimple_location (stmt);
expand_gimple_stmt_1 (stmt);
-
--[[gcc-8.3/gcc/gimple_has_location()]]
--[[gcc-8.3/gcc/gimple_location()]]
--[[gcc-8.3/gcc/expand_gimple_stmt_1()]]
/* Free any temporaries used to evaluate this statemen...
free_temp_slots ();
input_location = saved_location;
-
--[[gcc-8.3/gcc/free_temp_slots()]]
/* Mark all insns that may trap. */
lp_nr = lookup_stmt_eh_lp (stmt);
if (lp_nr)
{
rtx_insn *insn;
for (insn = next_real_insn (last); insn;
insn = next_real_insn (insn))
{
if (! find_reg_note (insn, REG_EH_REGION, NULL_RTX)
/* If we want exceptions for non-call insns, any
may_trap_p instruction may throw. */
&& GET_CODE (PATTERN (insn)) != CLOBBER
&& GET_CODE (PATTERN (insn)) != USE
&& insn_could_throw_p (insn))
make_reg_eh_region_note (insn, 0, lp_nr);
}
}
return last;
}
-
--[[gcc-8.3/gcc/lookup_stmt_eh_lp()]]
--[[gcc-8.3/gcc/next_real_insn()]]
--[[gcc-8.3/gcc/find_reg_note()]]
--[[gcc-8.3/gcc/GET_CODE()]]
--[[gcc-8.3/gcc/PATTERN()]]
--[[gcc-8.3/gcc/insn_could_throw_p()]]
--[[gcc-8.3/gcc/make_reg_eh_region_note()]]
*コメント [#k1aa8997]
終了行:
*参照元 [#me94cf10]
#backlinks
*説明 [#kc96550e]
-パス: [[gcc-8.3/gcc/cfgexpand.c]]
-FIXME: これは何?
--説明
**引数 [#wb433ef8]
-gimple *stmt
--
--[[gcc-8.3/gcc/gimple]]
**返り値 [#l867af5c]
-rtx_insn *
--
--[[gcc-8.3/gcc/rtx_insn]]
**参考 [#s6208e37]
*実装 [#f5e47a59]
/* Expand one gimple statement STMT and return the last ...
before any of the newly generated ones.
In addition to generating the necessary RTL instructi...
sets REG_EH_REGION notes if necessary and sets the cu...
location for diagnostics. */
static rtx_insn *
expand_gimple_stmt (gimple *stmt)
{
location_t saved_location = input_location;
rtx_insn *last = get_last_insn ();
int lp_nr;
gcc_assert (cfun);
-
--[[gcc-8.3/gcc/location_t]]
--[[gcc-8.3/gcc/get_last_insn()]]
--[[gcc-8.3/gcc/gcc_assert()]]
/* We need to save and restore the current source loca...
discovered during expansion are emitted with the ri...
it would be better if the diagnostic routines used ...
embedded in the tree nodes rather than globals. */
if (gimple_has_location (stmt))
input_location = gimple_location (stmt);
expand_gimple_stmt_1 (stmt);
-
--[[gcc-8.3/gcc/gimple_has_location()]]
--[[gcc-8.3/gcc/gimple_location()]]
--[[gcc-8.3/gcc/expand_gimple_stmt_1()]]
/* Free any temporaries used to evaluate this statemen...
free_temp_slots ();
input_location = saved_location;
-
--[[gcc-8.3/gcc/free_temp_slots()]]
/* Mark all insns that may trap. */
lp_nr = lookup_stmt_eh_lp (stmt);
if (lp_nr)
{
rtx_insn *insn;
for (insn = next_real_insn (last); insn;
insn = next_real_insn (insn))
{
if (! find_reg_note (insn, REG_EH_REGION, NULL_RTX)
/* If we want exceptions for non-call insns, any
may_trap_p instruction may throw. */
&& GET_CODE (PATTERN (insn)) != CLOBBER
&& GET_CODE (PATTERN (insn)) != USE
&& insn_could_throw_p (insn))
make_reg_eh_region_note (insn, 0, lp_nr);
}
}
return last;
}
-
--[[gcc-8.3/gcc/lookup_stmt_eh_lp()]]
--[[gcc-8.3/gcc/next_real_insn()]]
--[[gcc-8.3/gcc/find_reg_note()]]
--[[gcc-8.3/gcc/GET_CODE()]]
--[[gcc-8.3/gcc/PATTERN()]]
--[[gcc-8.3/gcc/insn_could_throw_p()]]
--[[gcc-8.3/gcc/make_reg_eh_region_note()]]
*コメント [#k1aa8997]
ページ名: