From: Karl Meakin <[email protected]>
Port the following intrinsics to the pragma-based framework:
* vget_lane
* vget_high
* vget_low
* vset_lane
* vdup_lane
* vcopy_lane
gcc/ChangeLog:
* config/aarch64/aarch64-simd-pragma-builtins.def (
vcopy_lane_mf8, vcopyq_lane_mf8, vcopy_laneq_mf8,
vcopyq_laneq_mf8, vdup_lane_mf8, vdupq_lane_mf8,
vdup_laneq_mf8, vdupq_laneq_mf8, vset_lane_mf8,
vsetq_lane_mf8): Delete entries.
* config/aarch64/aarch64-builtins.cc
(AARCH64_SIMD_VGET_LOW_BUILTINS,
AARCH64_SIMD_VGET_HIGH_BUILTINS, VGET_LOW_BUILTIN,
VGET_HIGH_BUILTIN): Delete macros.
(enum aarch64_builtins): Delete
`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
(aarch64_init_simd_builtin_functions): Delete code that
registers `__builtin_aarch64_im_lane_boundsi`.
(aarch64_pragma_builtins_checker::check): Delete cases for
`UNSPEC_DUP_LANE`, `UNSPEC_GET_LANE` and `UNSPEC_VEC_COPY`.
(aarch64_simd_expand_builtin): Delete case for
`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
(aarch64_expand_pragma_builtin): Delete cases for
`UNSPEC_DUP_LANE` and `UNSPEC_VEC_COPY`.
(aarch64_general_fold_builtin): Delete cases for
`AARCH64_SIMD_VGET_LOW_BUILTINS`,
`AARCH64_SIMD_VGET_HIGH_BUILTINS` and
`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
(aarch64_gimple_fold_pragma_builtin): Delete cases for
`UNSPEC_DUP_LANE` and `UNSPEC_VEC_COPY`.
(aarch64_general_gimple_fold_builtin): Delete cases for
`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
* config/aarch64/aarch64.md (UNSPEC_DUP_LANE): Delete unspec.
* config/aarch64/aarch64-neon-builtins-shapes.cc (range, lane):
New functions.
(struct neon_shape): Add new fields for additional checks, and
call them in `check()`.
* config/aarch64/aarch64-acle-builtins.cc
(gimple_folder::force_val, gimple_folder::assign): New
functions.
* config/aarch64/aarch64-acle-builtins.h (TYPES_all_neon,
TYPES_bhsd_neon, TYPES_neon_copy_lane): New type lists.
* config/aarch64/iterators.md (VALL_F16_NO_V2Q): Add `V4BF` and `V8BF`.
* config/aarch64/aarch64-neon-builtins-base.def (vget_lane,
vgetq_lane, vget_high, vget_low, vset_lane, vsetq_lane,
vdup_lane, vdupq_lane, vdup_laneq, vdupq_laneq, vcopy_lane,
vcopy_laneq, vcopyq_lane, vcopyq_laneq): New function groups.
* config/aarch64/aarch64-neon-builtins-base.cc (build_lane_get,
build_lane_set, build_vec_dup): New functions.
(struct gimple_get_lane, struct gimple_get_half, struct
gimple_set_lane, struct gimple_copy_lane, struct gimple_dup,
struct gimple_dup_lane): New structs.
(vget_lane, vgetq_lane, vset_lane, vsetq_lane, vcopy_lane,
vcopyq_lane, vcopy_laneq, vcopyq_laneq, vdup_lane, vdupq_lane,
vdupq_lane, vdupq_laneq): New function bases.
* config/aarch64/arm_neon.h (__aarch64_vdup_lane_p8,
__aarch64_vdup_lane_p16, __aarch64_vdup_lane_p64,
__aarch64_vdup_lane_s8, __aarch64_vdup_lane_s16,
__aarch64_vdup_lane_s32, __aarch64_vdup_lane_s64,
__aarch64_vdup_lane_u8, __aarch64_vdup_lane_u16,
__aarch64_vdup_lane_u32, __aarch64_vdup_lane_u64,
__aarch64_vdup_laneq_p8, __aarch64_vdup_laneq_p16,
__aarch64_vdup_laneq_p64, __aarch64_vdup_laneq_s8,
__aarch64_vdup_laneq_s16, __aarch64_vdup_laneq_s32,
__aarch64_vdup_laneq_s64, __aarch64_vdup_laneq_u8,
__aarch64_vdup_laneq_u16, __aarch64_vdup_laneq_u32,
__aarch64_vdup_laneq_u64, __aarch64_vdupq_lane_p8,
__aarch64_vdupq_lane_p16, __aarch64_vdupq_lane_p64,
__aarch64_vdupq_lane_s8, __aarch64_vdupq_lane_s16,
__aarch64_vdupq_lane_s32, __aarch64_vdupq_lane_s64,
__aarch64_vdupq_lane_u8, __aarch64_vdupq_lane_u16,
__aarch64_vdupq_lane_u32, __aarch64_vdupq_lane_u64,
__aarch64_vdupq_laneq_p8, __aarch64_vdupq_laneq_p16,
__aarch64_vdupq_laneq_p64, __aarch64_vdupq_laneq_s8,
__aarch64_vdupq_laneq_s16, __aarch64_vdupq_laneq_s32,
__aarch64_vdupq_laneq_s64, __aarch64_vdupq_laneq_u8,
__aarch64_vdupq_laneq_u16, __aarch64_vdupq_laneq_u32,
__aarch64_vdupq_laneq_u64, __AARCH64_LANE_CHECK,
__aarch64_vget_lane_any, __aarch64_vset_lane_any): Delete
macros.
(vget_lane_f16, vget_lane_f32, vget_lane_f64, vget_lane_p8,
vget_lane_p16, vget_lane_p64, vget_lane_s8, vget_lane_s16,
vget_lane_s32, vget_lane_s64, vget_lane_u8, vget_lane_u16,
vget_lane_u32, vget_lane_u64, vgetq_lane_f16, vgetq_lane_f32,
vgetq_lane_f64, vgetq_lane_p8, vgetq_lane_p16, vgetq_lane_p64,
vgetq_lane_s8, vgetq_lane_s16, vgetq_lane_s32, vgetq_lane_s64,
vgetq_lane_u8, vgetq_lane_u16, vgetq_lane_u32, vgetq_lane_u64,
vset_lane_f16, vset_lane_f32, vset_lane_f64, vset_lane_p8,
vset_lane_p16, vset_lane_p64, vset_lane_s8, vset_lane_s16,
vset_lane_s32, vset_lane_s64, vset_lane_u8, vset_lane_u16,
vset_lane_u32, vset_lane_u64, vsetq_lane_f16, vsetq_lane_f32,
vsetq_lane_f64, vsetq_lane_p8, vsetq_lane_p16, vsetq_lane_p64,
vsetq_lane_s8, vsetq_lane_s16, vsetq_lane_s32, vsetq_lane_s64,
vsetq_lane_u8, vsetq_lane_u16, vsetq_lane_u32, vsetq_lane_u64,
vcopy_lane_f32, vcopy_lane_f64, vcopy_lane_p8, vcopy_lane_p16,
vcopy_lane_p64, vcopy_lane_s8, vcopy_lane_s16, vcopy_lane_s32,
vcopy_lane_s64, vcopy_lane_u8, vcopy_lane_u16, vcopy_lane_u32,
vcopy_lane_u64, vcopy_laneq_f32, vcopy_laneq_f64,
vcopy_laneq_p8, vcopy_laneq_p16, vcopy_laneq_p64,
vcopy_laneq_s8, vcopy_laneq_s16, vcopy_laneq_s32,
vcopy_laneq_s64, vcopy_laneq_u8, vcopy_laneq_u16,
vcopy_laneq_u32, vcopy_laneq_u64, vcopyq_lane_f32,
vcopyq_lane_f64, vcopyq_lane_p8, vcopyq_lane_p16,
vcopyq_lane_p64, vcopyq_lane_s8, vcopyq_lane_s16,
vcopyq_lane_s32, vcopyq_lane_s64, vcopyq_lane_u8,
vcopyq_lane_u16, vcopyq_lane_u32, vcopyq_lane_u64,
vcopyq_laneq_f32, vcopyq_laneq_f64, vcopyq_laneq_p8,
vcopyq_laneq_p16, vcopyq_laneq_p64, vcopyq_laneq_s8,
vcopyq_laneq_s16, vcopyq_laneq_s32, vcopyq_laneq_s64,
vcopyq_laneq_u8, vcopyq_laneq_u16, vcopyq_laneq_u32,
vcopyq_laneq_u64, vdup_lane_f16, vdup_lane_f32, vdup_lane_f64,
vdup_lane_p8, vdup_lane_p16, vdup_lane_p64, vdup_lane_s8,
vdup_lane_s16, vdup_lane_s32, vdup_lane_s64, vdup_lane_u8,
vdup_lane_u16, vdup_lane_u32, vdup_lane_u64, vdup_laneq_f16,
vdup_laneq_f32, vdup_laneq_f64, vdup_laneq_p8, vdup_laneq_p16,
vdup_laneq_p64, vdup_laneq_s8, vdup_laneq_s16, vdup_laneq_s32,
vdup_laneq_s64, vdup_laneq_u8, vdup_laneq_u16, vdup_laneq_u32,
vdup_laneq_u64, vdupq_lane_f16, vdupq_lane_f32,
vdupq_lane_f64, vdupq_lane_p8, vdupq_lane_p16, vdupq_lane_p64,
vdupq_lane_s8, vdupq_lane_s16, vdupq_lane_s32, vdupq_lane_s64,
vdupq_lane_u8, vdupq_lane_u16, vdupq_lane_u32, vdupq_lane_u64,
vdupq_laneq_f16, vdupq_laneq_f32, vdupq_laneq_f64,
vdupq_laneq_p8, vdupq_laneq_p16, vdupq_laneq_p64,
vdupq_laneq_s8, vdupq_laneq_s16, vdupq_laneq_s32,
vdupq_laneq_s64, vdupq_laneq_u8, vdupq_laneq_u16,
vdupq_laneq_u32, vdupq_laneq_u64, vmulq_lane_f64,
vset_lane_bf16, vsetq_lane_bf16, vget_lane_bf16,
vgetq_lane_bf16, vdup_lane_bf16, vdup_laneq_bf16,
vdupq_lane_bf16, vdupq_laneq_bf16, vcopy_lane_bf16,
vcopyq_lane_bf16, vcopy_laneq_bf16, vcopyq_laneq_bf16): Delete
functions.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/simd/mf8_data_2.c: Fix test.
* gcc.target/aarch64/simd/fold_to_highpart_6.c: Fix test.
* g++.target/aarch64/lane-bound-1.C: Fix test.
* gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c:
Fix test.
* gcc.target/aarch64/lane-bound-3.c: Fix test.
* gcc.target/aarch64/pr113573.c: Fix test.
* gcc.target/aarch64/simd/vset_lane_s16_const_1.c: Fix test.
* gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c,
gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c,
gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c,
gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c,
gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c,
gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c,
gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c,
gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c:
Replace with...
gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c: ...this.
* gcc.target/aarch64/simd/vget_lane_f32_indices_1.c,
gcc.target/aarch64/simd/vget_lane_f64_indices_1.c,
gcc.target/aarch64/simd/vget_lane_p16_indices_1.c,
gcc.target/aarch64/simd/vget_lane_p8_indices_1.c,
gcc.target/aarch64/simd/vget_lane_s16_indices_1.c,
gcc.target/aarch64/simd/vget_lane_s32_indices_1.c,
gcc.target/aarch64/simd/vget_lane_s64_indices_1.c,
gcc.target/aarch64/simd/vget_lane_s8_indices_1.c,
gcc.target/aarch64/simd/vget_lane_u16_indices_1.c,
gcc.target/aarch64/simd/vget_lane_u32_indices_1.c,
gcc.target/aarch64/simd/vget_lane_u64_indices_1.c,
gcc.target/aarch64/simd/vget_lane_u8_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c,
gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c: Replace with...
* gcc.target/aarch64/simd/vget_lane_indices.c: ...this.
* gcc.target/aarch64/neon/arm_neon_test.h(VEC_LEN): New macro.
* gcc.target/aarch64/neon/vcopy_lane.c: New test.
* gcc.target/aarch64/neon/vdup_lane.c: New test.
* gcc.target/aarch64/neon/vget_lane.c: New test.
* gcc.target/aarch64/neon/vset_lane.c: New test.
---
gcc/config/aarch64/aarch64-acle-builtins.cc | 41 +-
gcc/config/aarch64/aarch64-acle-builtins.h | 25 +
gcc/config/aarch64/aarch64-builtins.cc | 146 +-
.../aarch64/aarch64-neon-builtins-base.cc | 204 +-
.../aarch64/aarch64-neon-builtins-base.def | 28 +
.../aarch64/aarch64-neon-builtins-shapes.cc | 65 +-
.../aarch64/aarch64-simd-pragma-builtins.def | 24 -
gcc/config/aarch64/aarch64.md | 3 -
gcc/config/aarch64/arm_neon.h | 7643 +++++++----------
gcc/config/aarch64/iterators.md | 2 +-
.../g++.target/aarch64/lane-bound-1.C | 2 +-
.../bf16_vect_copy_lane_1.c | 3 +-
.../vcopy_lane_bf16_indices_1.c | 18 -
.../vcopy_lane_bf16_indices_2.c | 18 -
.../advsimd-intrinsics/vcopy_lane_indices.c | 68 +
.../vcopy_laneq_bf16_indices_1.c | 17 -
.../vcopy_laneq_bf16_indices_2.c | 17 -
.../vcopyq_lane_bf16_indices_1.c | 17 -
.../vcopyq_lane_bf16_indices_2.c | 17 -
.../vcopyq_laneq_bf16_indices_1.c | 17 -
.../vcopyq_laneq_bf16_indices_2.c | 17 -
.../gcc.target/aarch64/lane-bound-3.c | 4 +-
.../gcc.target/aarch64/neon/arm_neon_test.h | 2 +
.../gcc.target/aarch64/neon/vcopy_lane.c | 438 +
.../gcc.target/aarch64/neon/vdup_lane.c | 647 ++
.../gcc.target/aarch64/neon/vget_high.c | 116 +
.../gcc.target/aarch64/neon/vget_lane.c | 449 +
.../gcc.target/aarch64/neon/vget_low.c | 100 +
.../gcc.target/aarch64/neon/vset_lane.c | 234 +
gcc/testsuite/gcc.target/aarch64/pr113573.c | 62 +-
.../aarch64/simd/fold_to_highpart_6.c | 24 +-
.../gcc.target/aarch64/simd/mf8_data_2.c | 1 -
.../aarch64/simd/vget_lane_f32_indices_1.c | 17 -
.../aarch64/simd/vget_lane_f64_indices_1.c | 17 -
.../aarch64/simd/vget_lane_indices.c | 46 +
.../aarch64/simd/vget_lane_p16_indices_1.c | 17 -
.../aarch64/simd/vget_lane_p8_indices_1.c | 17 -
.../aarch64/simd/vget_lane_s16_indices_1.c | 17 -
.../aarch64/simd/vget_lane_s32_indices_1.c | 17 -
.../aarch64/simd/vget_lane_s64_indices_1.c | 17 -
.../aarch64/simd/vget_lane_s8_indices_1.c | 17 -
.../aarch64/simd/vget_lane_u16_indices_1.c | 17 -
.../aarch64/simd/vget_lane_u32_indices_1.c | 17 -
.../aarch64/simd/vget_lane_u64_indices_1.c | 17 -
.../aarch64/simd/vget_lane_u8_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_f32_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_f64_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_p16_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_p8_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_s16_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_s32_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_s64_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_s8_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_u16_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_u32_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_u64_indices_1.c | 17 -
.../aarch64/simd/vgetq_lane_u8_indices_1.c | 17 -
.../aarch64/simd/vset_lane_s16_const_1.c | 2 +-
58 files changed, 5447 insertions(+), 5478 deletions(-)
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c
create mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcopy_lane.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vdup_lane.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vget_high.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vget_lane.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vget_low.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vset_lane.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/vget_lane_indices.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c
delete mode 100644
gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c