* reorg.c (make_return_insns) [DELAY_SLOTS_FOR_EPILOGUE]: Exit
early if current_function_epilogue_delay_list is non-empty.
* config/cris/cris.md ("return"): Add sanity check asserting that
current_function_epilogue_delay_list is empty.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@54668
138bc75d-0d04-0410-961f-
82ee72b054a4
+2002-06-16 Hans-Peter Nilsson <hp@axis.com>
+
+ PR target/7042
+ * reorg.c (make_return_insns) [DELAY_SLOTS_FOR_EPILOGUE]: Exit
+ early if current_function_epilogue_delay_list is non-empty.
+ * config/cris/cris.md ("return"): Add sanity check asserting that
+ current_function_epilogue_delay_list is empty.
+
2002-06-16 Jeff Law <law@redhat.com>
* toplev.c (rest_of_compilation): Perform a simpler, less costly
/* Just needs to hold a 'movem [sp+],rN'. */
char rd[sizeof (\"movem [$sp+],$r99\")];
+ /* Try to avoid reorg.c surprises; avoid emitting invalid code, prefer
+ crashing. This test would have avoided invalid code for target/7042. */
+ if (current_function_epilogue_delay_list != NULL)
+ abort ();
+
*rd = 0;
/* Start from the last call-saved register. We know that we have a
rtx real_return_label = end_of_function_label;
int slots, i;
+#ifdef DELAY_SLOTS_FOR_EPILOGUE
+ /* If a previous pass filled delay slots in the epilogue, things get a
+ bit more complicated, as those filler insns would generally (without
+ data flow analysis) have to be executed after any existing branch
+ delay slot filler insns. It is also unknown whether such a
+ transformation would actually be profitable. Note that the existing
+ code only cares for branches with (some) filled delay slots. */
+ if (current_function_epilogue_delay_list != NULL)
+ return;
+#endif
+
/* See if there is a RETURN insn in the function other than the one we
made for END_OF_FUNCTION_LABEL. If so, set up anything we can't change
into a RETURN to jump to it. */