Commit 11b904a1 by Bernd Schmidt Committed by Bernd Schmidt

cfgrtl.c (emit_insn_at_entry): New function.

	* cfgrtl.c (emit_insn_at_entry): New function.
	* rtl.h (emit_insn_at_entry): Declare it.
	* integrate.c (emit_initial_value_sets): Use it.

From-SVN: r116968
parent 61066abf
...@@ -5,6 +5,10 @@ ...@@ -5,6 +5,10 @@
expanding the number of iterations. expanding the number of iterations.
* config/bfin/bfin.c (bfin_rtx_costs): Handle UDIV, UMOD. * config/bfin/bfin.c (bfin_rtx_costs): Handle UDIV, UMOD.
* cfgrtl.c (emit_insn_at_entry): New function.
* rtl.h (emit_insn_at_entry): Declare it.
* integrate.c (emit_initial_value_sets): Use it.
2006-09-15 Kazu Hirata <kazu@codesourcery.com> 2006-09-15 Kazu Hirata <kazu@codesourcery.com>
* doc/tm.texi (TARGET_FUNCTION_VALUE): Put @deftypefn all in * doc/tm.texi (TARGET_FUNCTION_VALUE): Put @deftypefn all in
......
...@@ -453,6 +453,20 @@ entry_of_function (void) ...@@ -453,6 +453,20 @@ entry_of_function (void)
BB_HEAD (ENTRY_BLOCK_PTR->next_bb) : get_insns ()); BB_HEAD (ENTRY_BLOCK_PTR->next_bb) : get_insns ());
} }
/* Emit INSN at the entry point of the function, ensuring that it is only
executed once per function. */
void
emit_insn_at_entry (rtx insn)
{
edge_iterator ei = ei_start (ENTRY_BLOCK_PTR->succs);
edge e = ei_safe_edge (ei);
if (!(e->flags & EDGE_FALLTHRU))
abort ();
insert_insn_on_edge (insn, e);
commit_edge_insertions ();
}
/* Update insns block within BB. */ /* Update insns block within BB. */
void void
......
...@@ -294,7 +294,7 @@ emit_initial_value_sets (void) ...@@ -294,7 +294,7 @@ emit_initial_value_sets (void)
seq = get_insns (); seq = get_insns ();
end_sequence (); end_sequence ();
emit_insn_after (seq, entry_of_function ()); emit_insn_at_entry (seq);
return 0; return 0;
} }
......
...@@ -2074,6 +2074,7 @@ extern rtx emit (rtx); ...@@ -2074,6 +2074,7 @@ extern rtx emit (rtx);
extern void renumber_insns (void); extern void renumber_insns (void);
extern rtx delete_insn (rtx); extern rtx delete_insn (rtx);
extern rtx entry_of_function (void); extern rtx entry_of_function (void);
extern void emit_insn_at_entry (rtx);
extern void delete_insn_chain (rtx, rtx); extern void delete_insn_chain (rtx, rtx);
extern rtx unlink_insn_chain (rtx, rtx); extern rtx unlink_insn_chain (rtx, rtx);
extern rtx delete_insn_and_edges (rtx); extern rtx delete_insn_and_edges (rtx);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment