diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2002-06-16 18:54:43 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2002-06-16 18:54:43 +0000 |
commit | c134da6b7748136088781e3f19c0f2ced109a4b0 (patch) | |
tree | da9fbd6b307a08f8f2e1193f8f41e1127e4d7848 /gcc/reorg.c | |
parent | 038c79764b247f03fb5dfc2943cc32a8b3e15b6e (diff) | |
download | gcc-c134da6b7748136088781e3f19c0f2ced109a4b0.zip gcc-c134da6b7748136088781e3f19c0f2ced109a4b0.tar.gz gcc-c134da6b7748136088781e3f19c0f2ced109a4b0.tar.bz2 |
re PR target/7042 (cris-elf miscompiles line_hints in ghostscript - "return" delay slot bug)
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.
From-SVN: r54668
Diffstat (limited to 'gcc/reorg.c')
-rw-r--r-- | gcc/reorg.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c index 3e3052d..2ccde4f 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -3485,6 +3485,17 @@ make_return_insns (first) 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. */ |