[PATCH][GCC][mid-end] Allow larger copies when target supports unaligned access [Patch (1/2)]
Richard Biener
rguenther@suse.de
Wed Nov 15 08:31:00 GMT 2017
On Tue, 14 Nov 2017, Tamar Christina wrote:
> Hi All,
>
> This patch allows larger bitsizes to be used as copy size
> when the target does not have SLOW_UNALIGNED_ACCESS.
>
> fun3:
> adrp x2, .LANCHOR0
> add x2, x2, :lo12:.LANCHOR0
> mov x0, 0
> sub sp, sp, #16
> ldrh w1, [x2, 16]
> ldrb w2, [x2, 18]
> add sp, sp, 16
> bfi x0, x1, 0, 8
> ubfx x1, x1, 8, 8
> bfi x0, x1, 8, 8
> bfi x0, x2, 16, 8
> ret
>
> is turned into
>
> fun3:
> adrp x0, .LANCHOR0
> add x0, x0, :lo12:.LANCHOR0
> sub sp, sp, #16
> ldrh w1, [x0, 16]
> ldrb w0, [x0, 18]
> strh w1, [sp, 8]
> strb w0, [sp, 10]
> ldr w0, [sp, 8]
> add sp, sp, 16
> ret
>
> which avoids the bfi's for a simple 3 byte struct copy.
>
> Regression tested on aarch64-none-linux-gnu and x86_64-pc-linux-gnu and no regressions.
>
> This patch is just splitting off from the previous combined patch with AArch64 and adding
> a testcase.
>
> I assume Jeff's ACK from https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01523.html is still
> valid as the code did not change.
Given your no_slow_unalign isn't mode specific can't you use the existing
non_strict_align?
Otherwise the expr.c change looks ok.
Thanks,
Richard.
> Thanks,
> Tamar
>
>
> gcc/
> 2017-11-14 Tamar Christina <tamar.christina@arm.com>
>
> * expr.c (copy_blkmode_to_reg): Fix bitsize for targets
> with fast unaligned access.
> * doc/sourcebuild.texi (no_slow_unalign): New.
>
> gcc/testsuite/
> 2017-11-14 Tamar Christina <tamar.christina@arm.com>
>
> * gcc.dg/struct-simple.c: New.
> * lib/target-supports.exp
> (check_effective_target_no_slow_unalign): New.
>
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
More information about the Gcc-patches
mailing list