This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] LRA: Fix caller-save store/restore instruction for large mode
- From: Kito Cheng <kito dot cheng at gmail dot com>
- To: "Bin.Cheng" <amker dot cheng at gmail dot com>
- Cc: Vladimir Makarov <vmakarov at redhat dot com>, Jeff Law <law at redhat dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Bin Cheng <bin dot cheng at arm dot com>
- Date: Thu, 8 Jan 2015 23:58:59 +0800
- Subject: Re: [PATCH] LRA: Fix caller-save store/restore instruction for large mode
- Authentication-results: sourceware.org; auth=none
- References: <CA+yXCZCO=aabNSt-gJuj==bH7i9dNPr6-T+oz4jkvwdJAdfpfA at mail dot gmail dot com> <54AACA79 dot 5060008 at redhat dot com> <54AB1FFE dot 30707 at redhat dot com> <CAHFci28ciE==COSXT_qwNLWYHADLjBobDRKYZ6Nruh8QRH-CDQ at mail dot gmail dot com> <54ACB768 dot 4070609 at redhat dot com> <CA+yXCZD++vCJa2E6Ew5Ks3DT+iaJA35t1kQ08UKGxSef2FHn2A at mail dot gmail dot com> <CAHFci2_5uKvGh=_-jM+T8yj66=Zs45NDC0BH-eKV1jJUtDLa1w at mail dot gmail dot com> <CA+yXCZBijUvuY23M5YDZGBr0gwegeyq4PyUH7XUmoWRhOSwvvQ at mail dot gmail dot com> <CAHFci28og=2UNLUFx3h6L=nbkWe=qj2rdx+b=u1g0cpaEQd0Eg at mail dot gmail dot com>
Hi Jeff:
After discussion with Bin, he prefer just use
gcc.c-torture/execute/scal-to-vec1.c
instead of introduce new one, do you have any further comment on this patch?
On Thu, Jan 8, 2015 at 9:29 AM, Bin.Cheng <amker.cheng@gmail.com> wrote:
> On Wed, Jan 7, 2015 at 8:28 PM, Kito Cheng <kito.cheng@gmail.com> wrote:
>> Hi Bin:
>>
>> It's 2 more line than gcc.c-torture/execute/scal-to-vec1.c since it's
>> need specific compilation
>> flag and specific target to reproduce this issue,
>> and it's can't reproduce by normal testing flow with
>> arm-*-linux-gnueabi (due to lack -fPIC flag),
>> so I prefer duplicate this case into gcc.target/arm/ :)
>>
>> /* { dg-do compile } */
>> /* { dg-options "-O3 -fPIC -marm -mcpu=cortex-a8" } */
> Not really, we generally want to avoid cpu related options in testcase
> since it introduces conflict option failures when testing against
> specific processor, e.g. testing against Cortex-M profile processors.
>
> Thanks,
> bin
>
>>
>> On Wed, Jan 7, 2015 at 4:50 PM, Bin.Cheng <amker.cheng@gmail.com> wrote:
>>> On Wed, Jan 7, 2015 at 4:03 PM, Kito Cheng <kito.cheng@gmail.com> wrote:
>>>> Hi Jeff:
>>>>
>>>> It's updated patch,bootstrapped and run regression tested on arm-eabi,
>>>> arm-none-linux-uclibcgnueabi, x86_64-unknown-linux-gnu and nds32le-elf
>>>> without introducing regression.
>>>>
>>>> Thanks for your review :)
>>>>
>>>> 2015-01-07 Kito Cheng <kito@0xlab.org>
>>>>
>>>> PR target/64348
>>>> * lra-constraints.c (split_reg): Fix caller-save store/restore
>>>> instruction generation.
>>>
>>> Thanks for fixing the issue.
>>> The PR is against existing testcase failure
>>> gcc.c-torture/execute/scal-to-vec1.c. Unless we can create a new
>>> case, there is no need to include same case twice I think? Or we can
>>> mention the PR number in the original test case?
>>>
>>> Thanks,
>>> bin
From 98f58cca618a99e282c7add2ecbe59002c867c60 Mon Sep 17 00:00:00 2001
From: Kito Cheng <kito@andestech.com>
Date: Thu, 29 May 2014 23:53:23 +0800
Subject: [PATCH] Fix caller-save store/restore instruction for large mode in
lra
- The original code assume store/restore will always have only
one insn, it's will fail if you split in move pattern!!!
---
gcc/lra-constraints.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 96b10a1..f8bc12f 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -4918,15 +4918,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
reg_renumber[REGNO (new_reg)] = hard_regno;
}
save = emit_spill_move (true, new_reg, original_reg);
- if (NEXT_INSN (save) != NULL_RTX)
+ if (NEXT_INSN (save) != NULL_RTX && !call_save_p)
{
- lra_assert (! call_save_p);
if (lra_dump_file != NULL)
{
fprintf
(lra_dump_file,
- " Rejecting split %d->%d resulting in > 2 %s save insns:\n",
- original_regno, REGNO (new_reg), call_save_p ? "call" : "");
+ " Rejecting split %d->%d resulting in > 2 save insns:\n",
+ original_regno, REGNO (new_reg));
dump_rtl_slim (lra_dump_file, save, NULL, -1, 0);
fprintf (lra_dump_file,
" ))))))))))))))))))))))))))))))))))))))))))))))))\n");
@@ -4934,15 +4933,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
return false;
}
restore = emit_spill_move (false, new_reg, original_reg);
- if (NEXT_INSN (restore) != NULL_RTX)
+ if (NEXT_INSN (restore) != NULL_RTX && !call_save_p)
{
- lra_assert (! call_save_p);
if (lra_dump_file != NULL)
{
fprintf (lra_dump_file,
" Rejecting split %d->%d "
- "resulting in > 2 %s restore insns:\n",
- original_regno, REGNO (new_reg), call_save_p ? "call" : "");
+ "resulting in > 2 restore insns:\n",
+ original_regno, REGNO (new_reg));
dump_rtl_slim (lra_dump_file, restore, NULL, -1, 0);
fprintf (lra_dump_file,
" ))))))))))))))))))))))))))))))))))))))))))))))))\n");
--
1.8.3.1.549.g1f3a412