]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* rtl.h (emit_insn_before_sameloc, emit_jump_insn_before_sameloc)
authorDaniel Jacobowitz <drow@mvista.com>
Sat, 17 Jan 2004 22:14:17 +0000 (22:14 +0000)
committerDaniel Jacobowitz <drow@gcc.gnu.org>
Sat, 17 Jan 2004 22:14:17 +0000 (22:14 +0000)
(emit_call_insn_before_sameloc, emit_insn_after_sameloc)
(emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): New
macros.
* reload1.c (emit_reload_insns): Use them.
* emit-rtl.c (emit_insn_before_sameloc, emit_insn_after_sameloc)
(emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): Check
for NULL PATTERN.

From-SVN: r76062

gcc/ChangeLog
gcc/emit-rtl.c
gcc/reload1.c
gcc/rtl.h

index a40dc42d511bb5eb299a732ddb4b1541d5f1953e..3f71bd5fd00d18a4521e6bd0541c71b319bdc667 100644 (file)
@@ -1,3 +1,14 @@
+2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
+
+       * rtl.h (emit_insn_before_sameloc, emit_jump_insn_before_sameloc)
+       (emit_call_insn_before_sameloc, emit_insn_after_sameloc)
+       (emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): New
+       macros.
+       * reload1.c (emit_reload_insns): Use them.
+       * emit-rtl.c (emit_insn_before_sameloc, emit_insn_after_sameloc)
+       (emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): Check
+       for NULL PATTERN.
+
 2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
 
        * final.c (SEEN_BB, SEEN_NOTE, SEEN_EMITTED): Define.
index ddc84ee889507ca858fd2cfa91eb7e37a103a08a..a77b9d1e0e9d1654aff6f7591bb87109111c3774 100644 (file)
@@ -4383,6 +4383,9 @@ emit_insn_after_setloc (rtx pattern, rtx after, int loc)
 {
   rtx last = emit_insn_after (pattern, after);
 
+  if (pattern == NULL_RTX)
+    return last;
+
   after = NEXT_INSN (after);
   while (1)
     {
@@ -4401,6 +4404,9 @@ emit_jump_insn_after_setloc (rtx pattern, rtx after, int loc)
 {
   rtx last = emit_jump_insn_after (pattern, after);
 
+  if (pattern == NULL_RTX)
+    return last;
+
   after = NEXT_INSN (after);
   while (1)
     {
@@ -4419,6 +4425,9 @@ emit_call_insn_after_setloc (rtx pattern, rtx after, int loc)
 {
   rtx last = emit_call_insn_after (pattern, after);
 
+  if (pattern == NULL_RTX)
+    return last;
+
   after = NEXT_INSN (after);
   while (1)
     {
@@ -4438,6 +4447,9 @@ emit_insn_before_setloc (rtx pattern, rtx before, int loc)
   rtx first = PREV_INSN (before);
   rtx last = emit_insn_before (pattern, before);
 
+  if (pattern == NULL_RTX)
+    return last;
+
   first = NEXT_INSN (first);
   while (1)
     {
index 9a0ad8947468d74457b6af5b1de5089a10f2ad73..1df667e8f88828ba48aa70c8b493ca030985f7f2 100644 (file)
@@ -1,6 +1,6 @@
 /* Reload pseudo regs into hard regs for insns that require hard regs.
    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -6963,25 +6963,25 @@ emit_reload_insns (struct insn_chain *chain)
      reloads for the operand.  The RELOAD_OTHER output reloads are
      output in descending order by reload number.  */
 
-  emit_insn_before (other_input_address_reload_insns, insn);
-  emit_insn_before (other_input_reload_insns, insn);
+  emit_insn_before_sameloc (other_input_address_reload_insns, insn);
+  emit_insn_before_sameloc (other_input_reload_insns, insn);
 
   for (j = 0; j < reload_n_operands; j++)
     {
-      emit_insn_before (inpaddr_address_reload_insns[j], insn);
-      emit_insn_before (input_address_reload_insns[j], insn);
-      emit_insn_before (input_reload_insns[j], insn);
+      emit_insn_before_sameloc (inpaddr_address_reload_insns[j], insn);
+      emit_insn_before_sameloc (input_address_reload_insns[j], insn);
+      emit_insn_before_sameloc (input_reload_insns[j], insn);
     }
 
-  emit_insn_before (other_operand_reload_insns, insn);
-  emit_insn_before (operand_reload_insns, insn);
+  emit_insn_before_sameloc (other_operand_reload_insns, insn);
+  emit_insn_before_sameloc (operand_reload_insns, insn);
 
   for (j = 0; j < reload_n_operands; j++)
     {
-      rtx x = emit_insn_after (outaddr_address_reload_insns[j], insn);
-      x = emit_insn_after (output_address_reload_insns[j], x);
-      x = emit_insn_after (output_reload_insns[j], x);
-      emit_insn_after (other_output_reload_insns[j], x);
+      rtx x = emit_insn_after_sameloc (outaddr_address_reload_insns[j], insn);
+      x = emit_insn_after_sameloc (output_address_reload_insns[j], x);
+      x = emit_insn_after_sameloc (output_reload_insns[j], x);
+      emit_insn_after_sameloc (other_output_reload_insns[j], x);
     }
 
   /* For all the spill regs newly reloaded in this instruction,
index cd7b2aeac817d6181c0c31da52e451ba417dda09..fbd8eca337fd1ff6bda73ccb65dbbbca4b3b5884 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1573,6 +1573,19 @@ extern rtx next_label (rtx);
 extern rtx next_cc0_user (rtx);
 extern rtx prev_cc0_setter (rtx);
 
+#define emit_insn_before_sameloc(INSN, BEFORE) \
+  emit_insn_before_setloc (INSN, BEFORE, INSN_LOCATOR (BEFORE))
+#define emit_jump_insn_before_sameloc(INSN, BEFORE) \
+  emit_jump_insn_before_setloc (INSN, BEFORE, INSN_LOCATOR (BEFORE))
+#define emit_call_insn_before_sameloc(INSN, BEFORE) \
+  emit_call_insn_before_setloc (INSN, BEFORE, INSN_LOCATOR (BEFORE))
+#define emit_insn_after_sameloc(INSN, AFTER) \
+  emit_insn_after_setloc (INSN, AFTER, INSN_LOCATOR (AFTER))
+#define emit_jump_insn_after_sameloc(INSN, AFTER) \
+  emit_jump_insn_after_setloc (INSN, AFTER, INSN_LOCATOR (AFTER))
+#define emit_call_insn_after_sameloc(INSN, AFTER) \
+  emit_call_insn_after_setloc (INSN, AFTER, INSN_LOCATOR (AFTER))
+
 /* In cfglayout.c  */
 extern tree choose_inner_scope (tree, tree);
 extern int insn_line (rtx);