diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2023-04-25 14:50:32 +0100 |
---|---|---|
committer | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2023-04-25 14:51:09 +0100 |
commit | c69db3ef7f7d82a50f46038aa5457b7c8cc2d643 (patch) | |
tree | fbd52c0666243d2095f2348e09ce9dcce45ee46e /gcc/fortran/trans-openmp.cc | |
parent | 784e03f378bb2c330b96459928d0472d38748970 (diff) | |
download | gcc-c69db3ef7f7d82a50f46038aa5457b7c8cc2d643.zip gcc-c69db3ef7f7d82a50f46038aa5457b7c8cc2d643.tar.gz gcc-c69db3ef7f7d82a50f46038aa5457b7c8cc2d643.tar.bz2 |
aarch64: Implement V2DI,V4SI division optabs for TARGET_SVE
Similar to the mulv2di case, we can use SVE instruction to implement the V4SI and V2DI optabs
for signed and unsigned integer division.
This allows us to generate much cleaner code for the testcase than the current:
food:
fmov x1, d1
fmov x0, d0
umov x2, v0.d[1]
sdiv x0, x0, x1
umov x1, v1.d[1]
sdiv x1, x2, x1
fmov d0, x0
ins v0.d[1], x1
ret
which now becomes:
food:
ptrue p0.b, all
sdiv z0.d, p0/m, z0.d, z1.d
ret
Bootstrapped and tested on aarch64-none-linux-gnu.
gcc/ChangeLog:
* config/aarch64/aarch64-simd.md (<su_optab>div<mode>3): New define_expand.
* config/aarch64/iterators.md (VQDIV): New mode iterator.
(vnx2di): New mode attribute.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/sve-neon-modes_3.c: New test.
Diffstat (limited to 'gcc/fortran/trans-openmp.cc')
0 files changed, 0 insertions, 0 deletions