]> git.ipfire.org Git - thirdparty/gcc.git/commit
AArch64: Add special patterns for creating DI scalar and vector constant 1 << 63...
authorTamar Christina <tamar.christina@arm.com>
Thu, 9 Nov 2023 14:02:21 +0000 (14:02 +0000)
committerTamar Christina <tamar.christina@arm.com>
Thu, 9 Nov 2023 14:06:07 +0000 (14:06 +0000)
commit2ea13fb9c0b56e9b8c0425d101cf81437a5200cf
treeb08b0df01641cb0d615d36171aac5f07f800d70c
parentf30ecd8050444fb902ab66b4600c590908861fdf
AArch64: Add special patterns for creating DI scalar and vector constant 1 << 63 [PR109154]

This adds a way to generate special sequences for creation of constants for
which we don't have single instructions sequences which would have normally
lead to a GP -> FP transfer or a literal load.

The patch starts out by adding support for creating 1 << 63 using fneg (mov 0).

gcc/ChangeLog:

PR tree-optimization/109154
* config/aarch64/aarch64-protos.h (aarch64_simd_special_constant_p,
aarch64_maybe_generate_simd_constant): New.
* config/aarch64/aarch64-simd.md (*aarch64_simd_mov<VQMOV:mode>,
*aarch64_simd_mov<VDMOV:mode>): Add new coden for special constants.
* config/aarch64/aarch64.cc (aarch64_extract_vec_duplicate_wide_int):
Take optional mode.
(aarch64_simd_special_constant_p,
aarch64_maybe_generate_simd_constant): New.
* config/aarch64/aarch64.md (*movdi_aarch64): Add new codegen for
special constants.
* config/aarch64/constraints.md (Dx): new.

gcc/testsuite/ChangeLog:

PR tree-optimization/109154
* gcc.target/aarch64/fneg-abs_1.c: Updated.
* gcc.target/aarch64/fneg-abs_2.c: Updated.
* gcc.target/aarch64/fneg-abs_4.c: Updated.
* gcc.target/aarch64/dbl_mov_immediate_1.c: Updated.
gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64-simd.md
gcc/config/aarch64/aarch64.cc
gcc/config/aarch64/aarch64.md
gcc/config/aarch64/constraints.md
gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c
gcc/testsuite/gcc.target/aarch64/fneg-abs_1.c
gcc/testsuite/gcc.target/aarch64/fneg-abs_2.c
gcc/testsuite/gcc.target/aarch64/fneg-abs_4.c