Avoid scheduling builtin setjmp receivers
authorBernd Schmidt <bernds@redhat.com>
Wed, 7 Feb 2001 10:24:22 +0000 (10:24 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 7 Feb 2001 10:24:22 +0000 (10:24 +0000)
From-SVN: r39515

gcc/ChangeLog
gcc/builtins.c

index 09a3a714645b6e2c19089185f845b6675a53d608..baa60ba67786424ee0df347fc8dfa6f535a68657 100644 (file)
@@ -1,3 +1,8 @@
+2001-02-07  Bernd Schmidt  <bernds@redhat.com>
+
+       * builtins.c (expand_builtin_setjmp_receiver): Emit an ASM_INPUT as
+       a scheduling barrier at the end.
+
 2001-02-07  Alexandre Oliva  <aoliva@redhat.com>
 
        * config/sh/sh.md (reload_outsf): Removed.
index 1a6d87f77d461e99ce9056fa91d085ea91652f39..3dedc5b336aa7361cb62d5040271c11a27e5f4fb 100644 (file)
@@ -581,6 +581,13 @@ expand_builtin_setjmp_receiver (receiver_label)
     else
 #endif
       { /* Nothing */ }
+
+  /* @@@ This is a kludge.  Not all machine descriptions define a blockage
+     insn, but we must not allow the code we just generated to be reordered
+     by scheduling.  Specifically, the update of the frame pointer must
+     happen immediately, not later.  So emit an ASM_INPUT to act as blockage
+     insn.  */
+  emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
 }
 
 /* __builtin_setjmp is passed a pointer to an array of five words (not