From be9ae528e06dc806b807fe88b0fccf44d53fc1d4 Mon Sep 17 00:00:00 2001 From: amylaar Date: Mon, 29 Jul 2013 22:45:38 +0000 Subject: [PATCH] Merged from mainline: PR rtl-optimization/58021 * mode-switching.c (create_pre_exit): Always split off preceding insns if we are not at the basic block head. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201321 138bc75d-0d04-0410-961f-82ee72b054a4 Conflicts: gcc/ChangeLog --- gcc/ChangeLog.epiphany | 4 ++++ gcc/mode-switching.c | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog.epiphany b/gcc/ChangeLog.epiphany index 81165678c362..907858449630 100644 --- a/gcc/ChangeLog.epiphany +++ b/gcc/ChangeLog.epiphany @@ -10,6 +10,10 @@ testsuite: * gcc.dg/tree-ssa/pr44258.c: Disable scan test for Epiphany. + 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-27 Joern Rennecke merged from trunk: diff --git a/gcc/mode-switching.c b/gcc/mode-switching.c index 4cacaa2a0349..faba747c91af 100644 --- a/gcc/mode-switching.c +++ b/gcc/mode-switching.c @@ -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 && nregs != 1)); - if (INSN_P (last_insn)) + if (!NOTE_INSN_BASIC_BLOCK_P (last_insn)) { before_return_copy = 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) require a different mode than MODE_EXIT, so if we might have such instructions, keep them in a separate block from pre_exit. */ - if (last_insn != BB_HEAD (src_bb)) - src_bb = split_block (src_bb, - PREV_INSN (before_return_copy))->dest; + src_bb = split_block (src_bb, + PREV_INSN (before_return_copy))->dest; } else before_return_copy = last_insn;