*参照元 [#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 RTL instruction before any of the newly generated ones. In addition to generating the necessary RTL instructions this also sets REG_EH_REGION notes if necessary and sets the current source 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 location so that errors discovered during expansion are emitted with the right location. But it would be better if the diagnostic routines used the source location 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 statement. */ 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]