From aa02fa1963ef7df326187a587503acd2e295281b Mon Sep 17 00:00:00 2001
From: bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 15 Sep 2006 12:35:43 +0000
Subject: [PATCH] 	* cfgrtl.c (emit_insn_at_entry): New function. 	*
 rtl.h (emit_insn_at_entry): Declare it. 	* integrate.c
 (emit_initial_value_sets): Use it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116968 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog   |  4 ++++
 gcc/cfgrtl.c    | 14 ++++++++++++++
 gcc/integrate.c |  2 +-
 gcc/rtl.h       |  1 +
 4 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d6f892c6ea6e..b69961aa18bb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -5,6 +5,10 @@
 	expanding the number of iterations.
 	* 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>
 
 	* doc/tm.texi (TARGET_FUNCTION_VALUE): Put @deftypefn all in
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index b07bb9467eb1..df281cb2d89b 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -453,6 +453,20 @@ entry_of_function (void)
 	  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.  */
 
 void
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 98769354ddff..a6eeede39859 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -294,7 +294,7 @@ emit_initial_value_sets (void)
   seq = get_insns ();
   end_sequence ();
 
-  emit_insn_after (seq, entry_of_function ());
+  emit_insn_at_entry (seq);
   return 0;
 }
 
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 75a89b63df10..f8d97a18aad8 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2074,6 +2074,7 @@ extern rtx emit (rtx);
 extern void renumber_insns (void);
 extern rtx delete_insn (rtx);
 extern rtx entry_of_function (void);
+extern void emit_insn_at_entry (rtx);
 extern void delete_insn_chain (rtx, rtx);
 extern rtx unlink_insn_chain (rtx, rtx);
 extern rtx delete_insn_and_edges (rtx);
-- 
GitLab