re PR target/41993 ([sh] ICE in create_pre_exit, at mode-switching.c:399)

PR target/41993
	* mode-switching.c (create_pre_exit): Set return_copy to last_insn
	when copy_start is a function return regno instead of pseudo.
	Skip debug instructions in instruction scan loop.

From-SVN: r193480
This commit is contained in:
Uros Bizjak 2012-11-13 17:59:37 +01:00 committed by Uros Bizjak
parent be22520dc2
commit ffbbfaba10
2 changed files with 10 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2012-11-13 Uros Bizjak <ubizjak@gmail.com>
PR target/41993
* mode-switching.c (create_pre_exit): Set return_copy to last_insn
when copy_start is a function return regno instead of pseudo.
Skip debug instructions in instruction scan loop.
2012-11-13 Andrew Stubbs <ams@codesourcery.com>
Ulrich Weigand <ulrich.weigand@linaro.org>

View File

@ -242,7 +242,8 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
int copy_start, copy_num;
int j;
if (INSN_P (return_copy))
if (INSN_P (return_copy)
&& !DEBUG_INSN_P (return_copy))
{
/* When using SJLJ exceptions, the call to the
unregister function is inserted between the
@ -330,7 +331,7 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
short_block = 1;
break;
}
if (copy_start >= FIRST_PSEUDO_REGISTER)
if (!targetm.calls.function_value_regno_p (copy_start))
{
last_insn = return_copy;
continue;