(jump_optimize): Try putting RETURN at end of function both at start
authorRichard Kenner <kenner@gcc.gnu.org>
Tue, 21 Sep 1993 14:20:39 +0000 (10:20 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Tue, 21 Sep 1993 14:20:39 +0000 (10:20 -0400)
and at end of our optimization.

From-SVN: r5376

gcc/jump.c

index 229cd86..6ab071f 100644 (file)
@@ -1916,6 +1916,26 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
        }
   }
 
+#ifdef HAVE_return
+  if (HAVE_return)
+    {
+      /* If we fall through to the epilogue, see if we can insert a RETURN insn
+        in front of it.  If the machine allows it at this point (we might be
+        after reload for a leaf routine), it will improve optimization for it
+        to be there.  We do this both here and at the start of this pass since
+        the RETURN might have been deleted by some of our optimizations.  */
+      insn = get_last_insn ();
+      while (insn && GET_CODE (insn) == NOTE)
+       insn = PREV_INSN (insn);
+
+      if (insn && GET_CODE (insn) != BARRIER)
+       {
+         emit_jump_insn (gen_return ());
+         emit_barrier ();
+       }
+    }
+#endif
+
   /* See if there is still a NOTE_INSN_FUNCTION_END in this function.
      If so, delete it, and record that this function can drop off the end.  */