This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch RFA middle-end] Fix PR target/41993
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: Kaz Kojima <kkojima at rr dot iij4u dot or dot jp>, gcc-patches at gcc dot gnu dot org
- Date: Mon, 12 Nov 2012 09:36:23 +0100
- Subject: Re: [patch RFA middle-end] Fix PR target/41993
- References: <20121106.075813.150568568.kkojima@rr.iij4u.or.jp> <5638451.sS5NhrCmua@polaris>
On Tue, Nov 6, 2012 at 9:12 AM, Eric Botcazou <ebotcazou@adacore.com> wrote:
>> 2012-11-05 Uros Bizjak <ubizjak@gmail.com>
>> Kaz Kojima <kkojima@gcc.gnu.org>
>>
>> PR target/41993
>> * mode-switching.c (create_pre_exit): Set return_copy to
>> last_insn when copy_start is a pseudo reg.
It looks to me, that we in fact want:
--cut here--
Index: mode-switching.c
===================================================================
--- mode-switching.c (revision 193407)
+++ mode-switching.c (working copy)
@@ -330,7 +330,7 @@
short_block = 1;
break;
}
- if (copy_start >= FIRST_PSEUDO_REGISTER)
+ if (!targetm.calls.function_value_regno_p (copy_start))
{
last_insn = return_copy;
continue;
--cut here--
If we find an unrelated HARD register, we will fail in the same way as
described in the PR. This was found by post-reload vzeroupper
insertion pass that tripped on unrelated hard reg assignment. At this
point, we are interested only in hard registers that are also used for
function return value. Actually, even in pre-reload pass, there are no
other assignments to hard registers.
Uros.