i386: Fix k*shift* intrinsics [PR93673]
commitfbb4d21086a20cd996049309d6c24d7fb3099123
authorJakub Jelinek <jakub@redhat.com>
Fri, 14 Feb 2020 14:49:32 +0000 (14 15:49 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 14 Feb 2020 15:01:48 +0000 (14 16:01 +0100)
treee5a0e770368c6938cfb9ef8803e82b9c91f62484
parent5538456480ad9c1a411b76479c798984bcae2c5c
i386: Fix k*shift* intrinsics [PR93673]

As mentioned in the PR, the intrinsics allow counts from 0 to 255, but
we actually reject values from 128 to 255.  That is because QImode
CONST_INTs can be only -128 to 127.  Fixed by using const_0_to_255_operand
and dropping the modes for the operands with those predicates
(the IL actually contains the CONST_INT which has VOIDmode).

2020-02-13  Jakub Jelinek  <jakub@redhat.com>

PR target/93673
* config/i386/sse.md (k<code><mode>): Drop mode from last operand and
use const_0_to_255_operand predicate instead of immediate_operand.
(avx512dq_fpclass<mode><mask_scalar_merge_name>,
avx512dq_vmfpclass<mode><mask_scalar_merge_name>,
vgf2p8affineinvqb_<mode><mask_name>,
vgf2p8affineqb_<mode><mask_name>): Drop mode from
const_0_to_255_operand predicated operands.

* gcc.target/i386/avx512f-pr93673.c: New test.
* gcc.target/i386/avx512dq-pr93673.c: New test.
* gcc.target/i386/avx512bw-pr93673.c: New test.
gcc/ChangeLog
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/avx512bw-pr93673.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512dq-pr93673.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512f-pr93673.c [new file with mode: 0644]