From ffbbfaba10ddb891402eae5e158abc82c804db11 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 13 Nov 2012 17:59:37 +0100 Subject: 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 --- gcc/ChangeLog | 7 +++++++ gcc/mode-switching.c | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 863190f..864fc8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-11-13 Uros Bizjak + + 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 Ulrich Weigand diff --git a/gcc/mode-switching.c b/gcc/mode-switching.c index 2072628..d607ad3 100644 --- a/gcc/mode-switching.c +++ b/gcc/mode-switching.c @@ -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; -- cgit v1.1