re PR rtl-optimization/57968 (MODE_EXIT switches inserted too early)

PR rtl-optimization/57968
        * mode-switching.c (create_pre_exit): Allow instructions that
        don't set a return register to need a non-exit mode.

From-SVN: r201225
This commit is contained in:
Joern Rennecke 2013-07-24 20:12:49 +00:00 committed by Joern Rennecke
parent f1e1872559
commit ce4a94223e
2 changed files with 15 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2013-07-24 Joern Rennecke <joern.rennecke@embecosm.com>
PR rtl-optimization/57968
* mode-switching.c (create_pre_exit): Allow instructions that
don't set a return register to need a non-exit mode.
2013-07-24 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
Anton Blanchard <anton@au1.ibm.com>

View file

@ -330,12 +330,10 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
break;
}
if (!targetm.calls.function_value_regno_p (copy_start))
{
last_insn = return_copy;
continue;
}
copy_num
= hard_regno_nregs[copy_start][GET_MODE (copy_reg)];
copy_num = 0;
else
copy_num
= hard_regno_nregs[copy_start][GET_MODE (copy_reg)];
/* If the return register is not likely spilled, - as is
the case for floating point on SH4 - then it might
@ -372,6 +370,11 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
forced_late_switch = 1;
break;
}
if (copy_num == 0)
{
last_insn = return_copy;
continue;
}
if (copy_start >= ret_start
&& copy_start + copy_num <= ret_end)