This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][arm] Avoid STRD with odd register for TARGET_ARM in output_move_double


On Fri, 29 Jun 2018 at 15:32, Kyrill Tkachov
<kyrylo.tkachov@foss.arm.com> wrote:
>
> Hi all,
>
> In this testcase the user forces an odd register as the starting reg for a DFmode value.
> The output_move_double function tries to store that using an STRD instruction.
> But for TARGET_ARM the starting register of an STRD must be an even one.
> This is always the case with compiler-allocated registers for DFmode values, but the
> inline assembly forced our hand here.
>
> This patch  restricts the STRD-emitting logic in output_move_double to not avoid
> odd-numbered source registers in STRD.
> I'm not a fan of the whole function, we should be exposing a lot of the logic in there
> to RTL rather than at the final output stage, but that would need to be fixed separately.
>
> This patch is much safer for backporting purposes.
>
> Bootstrapped and tested on arm-none-linux-gnueabihf.
>

Hi Kyrill,

I think you want to skip this test if one overrides -mfloat-abi, like
the small attached patch does.

OK?

Thanks,

Christophe

> Committing to trunk.
> Thanks,
> Kyrill
>
> 2018-06-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>
>      * config/arm/arm.c (output_move_double): Don't allow STRD instructions
>      if starting source register is not even.
>
> 2018-06-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>
>      * gcc.target/arm/arm-soft-strd-even.c: New test.

Attachment: strd.chlog.txt
Description: Text document

Attachment: strd.patch.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]