[AArch64] Implement ADD in vector registers for 32-bit scalar values.
James Greenhalgh
james.greenhalgh@arm.com
Fri Mar 28 10:01:00 GMT 2014
Hi,
There is no way to perform scalar addition in the vector register file,
but with the RTX costs in place we start rewriting (x << 1) to (x + x)
on almost all cores. The code which makes this decision has no idea that we
will end up doing this (it happens well before reload) and so we end up with
very ugly code generation in the case where addition was selected, but
we are operating in vector registers.
This patch relies on the same gimmick we are already using to allow
shifts on 32-bit scalars in the vector register file - Use a vector 32x2
operation instead, knowing that we can safely ignore the top bits.
This restores some normality to scalar_shift_1.c, however the test
that we generate a left shift by one is clearly bogus, so remove that.
This patch is pretty ugly, but it does generate superficially better
looking code for this testcase.
Tested on aarch64-none-elf with no issues.
OK for stage 1?
Thanks,
James
---
gcc/
2014-03-27 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64.md (*addsi3_aarch64): Add alternative in
vector registers.
gcc/testsuite/
2014-03-27 James Greenhalgh <james.greenhalgh@arm.com>
* gcc.target/aarch64/scalar_shift_1.c: Fix expected assembler.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-AArch64-Implement-ADD-in-vector-registers-for-32-bit.patch
Type: text/x-patch
Size: 1719 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20140328/0df0eed2/attachment.bin>
More information about the Gcc-patches
mailing list