Commit bba33211 by Joern Rennecke Committed by Joern Rennecke

re PR rtl-optimization/58021 (MODE_EXIT switches at NOTE_INSN_DELETED)

        PR rtl-optimization/58021
        * mode-switching.c (create_pre_exit): Always split off preceding
        insns if we are not at the basic block head.

From-SVN: r201321
parent e1379122
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
* predicates.md (float_operation): Allow patterns with three * predicates.md (float_operation): Allow patterns with three
basic sub-patterns. basic sub-patterns.
PR rtl-optimization/58021
* mode-switching.c (create_pre_exit): Always split off preceding
insns if we are not at the basic block head.
2013-07-29 Maciej W. Rozycki <macro@codesourcery.com> 2013-07-29 Maciej W. Rozycki <macro@codesourcery.com>
* config/mips/linux.h (GLIBC_DYNAMIC_LINKER): Handle `-mnan=2008'. * config/mips/linux.h (GLIBC_DYNAMIC_LINKER): Handle `-mnan=2008'.
......
...@@ -420,7 +420,7 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes) ...@@ -420,7 +420,7 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
|| (GET_MODE_CLASS (GET_MODE (ret_reg)) != MODE_INT || (GET_MODE_CLASS (GET_MODE (ret_reg)) != MODE_INT
&& nregs != 1)); && nregs != 1));
if (INSN_P (last_insn)) if (!NOTE_INSN_BASIC_BLOCK_P (last_insn))
{ {
before_return_copy before_return_copy
= emit_note_before (NOTE_INSN_DELETED, last_insn); = emit_note_before (NOTE_INSN_DELETED, last_insn);
...@@ -428,9 +428,8 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes) ...@@ -428,9 +428,8 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
require a different mode than MODE_EXIT, so if we might require a different mode than MODE_EXIT, so if we might
have such instructions, keep them in a separate block have such instructions, keep them in a separate block
from pre_exit. */ from pre_exit. */
if (last_insn != BB_HEAD (src_bb)) src_bb = split_block (src_bb,
src_bb = split_block (src_bb, PREV_INSN (before_return_copy))->dest;
PREV_INSN (before_return_copy))->dest;
} }
else else
before_return_copy = last_insn; before_return_copy = last_insn;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment