diff options
author | Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> | 2024-07-16 10:41:41 +0200 |
---|---|---|
committer | Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> | 2024-07-16 10:41:41 +0200 |
commit | 1b575bb24a7a3d2b00197dd5deb4c26b313f442b (patch) | |
tree | 877b04e53cf5bf99ff8f76d851d8467353b32f6f /gcc/tree-vect-loop.cc | |
parent | a177be05f6952c3f7e62186d2e138d96c475b81a (diff) | |
download | gcc-1b575bb24a7a3d2b00197dd5deb4c26b313f442b.zip gcc-1b575bb24a7a3d2b00197dd5deb4c26b313f442b.tar.gz gcc-1b575bb24a7a3d2b00197dd5deb4c26b313f442b.tar.bz2 |
s390: Emulate vec_cmp{eq,gt,gtu} for 128-bit integers
Mode iterator V_HW enables V1TI for target VXE which means
vec_cmpv1tiv1ti becomes available which leads to an ICE since there is
no corresponding insn.
Fixed by emulating comparisons and enabling mode V1TI unconditionally
for V_HW. For the sake of symmetry, I also added TI mode to V_HW since
TF mode is already included. As a consequence the consumers of V_HW
vec_{splat,slb,sld,sldw,sldb,srdb,srab,srb,test_mask_int,test_mask}
also become available for 128-bit integers.
This fixes gcc.c-torture/execute/pr105613.c and gcc.dg/pr106063.c.
gcc/ChangeLog:
* config/s390/vector.md (V_HW): Enable V1TI unconditionally and
add TI.
(vec_cmpu<VIT_HW:mode><VIT_HW:mode>): Add 128-bit integer
variants.
(*vec_cmpeq<mode><mode>_nocc_emu): Emulate operation.
(*vec_cmpgt<mode><mode>_nocc_emu): Emulate operation.
(*vec_cmpgtu<mode><mode>_nocc_emu): Emulate operation.
gcc/testsuite/ChangeLog:
* gcc.target/s390/vector/vec-cmp-emu-1.c: New test.
* gcc.target/s390/vector/vec-cmp-emu-2.c: New test.
* gcc.target/s390/vector/vec-cmp-emu-3.c: New test.
Diffstat (limited to 'gcc/tree-vect-loop.cc')
0 files changed, 0 insertions, 0 deletions