AArch64: Fix expansion of Advanced SIMD div and mul using SVE [PR109636]
As suggested in the ticket this replaces the expansion by converting the Advanced SIMD types to SVE types by simply printing out an SVE register for these instructions. This fixes the subreg issues since there are no subregs involved anymore. gcc/ChangeLog: PR target/109636 * config/aarch64/aarch64-simd.md (<su_optab>div<mode>3, mulv2di3): Remove. * config/aarch64/iterators.md (VQDIV): Remove. (SVE_FULL_SDI_SIMD, SVE_FULL_HSDI_SIMD_DI, SVE_I_SIMD_DI): New. (VPRED, sve_lane_con): Add V4SI and V2DI. * config/aarch64/aarch64-sve.md (<optab><mode>3, @aarch64_pred_<optab><mode>): Support Advanced SIMD types. (mul<mode>3): New, split from <optab><mode>3. (@aarch64_pred_<optab><mode>, *post_ra_<optab><mode>3): New. * config/aarch64/aarch64-sve2.md (@aarch64_mul_lane_<mode>, *aarch64_mul_unpredicated_<mode>): Change SVE_FULL_HSDI to SVE_FULL_HSDI_SIMD_DI. gcc/testsuite/ChangeLog: PR target/109636 * gcc.target/aarch64/sve/pr109636_1.c: New test. * gcc.target/aarch64/sve/pr109636_2.c: New test. * gcc.target/aarch64/sve2/pr109636_1.c: New test.
Showing
- gcc/config/aarch64/aarch64-simd.md 0 additions, 41 deletionsgcc/config/aarch64/aarch64-simd.md
- gcc/config/aarch64/aarch64-sve.md 51 additions, 29 deletionsgcc/config/aarch64/aarch64-sve.md
- gcc/config/aarch64/aarch64-sve2.md 13 additions, 13 deletionsgcc/config/aarch64/aarch64-sve2.md
- gcc/config/aarch64/iterators.md 15 additions, 4 deletionsgcc/config/aarch64/iterators.md
- gcc/testsuite/gcc.target/aarch64/sve/pr109636_1.c 13 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sve/pr109636_1.c
- gcc/testsuite/gcc.target/aarch64/sve/pr109636_2.c 13 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sve/pr109636_2.c
- gcc/testsuite/gcc.target/aarch64/sve2/pr109636_1.c 13 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sve2/pr109636_1.c
Loading
Please register or sign in to comment