re PR target/78102 (GCC refuses to generate PCMPEQQ instruction for SSE4.1)
authorJakub Jelinek <jakub@redhat.com>
Tue, 25 Oct 2016 16:26:12 +0000 (18:26 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 25 Oct 2016 16:26:12 +0000 (18:26 +0200)
commit96592eeda1f5cb381d91ef78dea3e2666bbdb7b5
tree9f9b788664b48c4b29fde366326af8ab3961d90f
parent8c78afcec88be17030623a4290f214928c143b29
re PR target/78102 (GCC refuses to generate PCMPEQQ instruction for SSE4.1)

PR target/78102
* optabs.def (vcondeq_optab, vec_cmpeq_optab): New optabs.
* optabs.c (expand_vec_cond_expr): For comparison codes
EQ_EXPR and NE_EXPR, attempt vcondeq_optab as fallback.
(expand_vec_cmp_expr): For comparison codes
EQ_EXPR and NE_EXPR, attempt vec_cmpeq_optab as fallback.
* optabs-tree.h (expand_vec_cmp_expr_p, expand_vec_cond_expr_p):
Add enum tree_code argument.
* optabs-query.h (get_vec_cmp_eq_icode, get_vcond_eq_icode): New
inline functions.
* optabs-tree.c (expand_vec_cmp_expr_p): Add CODE argument.  For
CODE EQ_EXPR or NE_EXPR, attempt to use vec_cmpeq_optab as
fallback.
(expand_vec_cond_expr_p): Add CODE argument.  For CODE EQ_EXPR or
NE_EXPR, attempt to use vcondeq_optab as fallback.
* tree-vect-generic.c (expand_vector_comparison,
expand_vector_divmod, expand_vector_condition): Adjust
expand_vec_cmp_expr_p and expand_vec_cond_expr_p callers.
* tree-vect-stmts.c (vectorizable_condition,
vectorizable_comparison): Likewise.
* tree-vect-patterns.c (vect_recog_mixed_size_cond_pattern,
check_bool_pattern, search_type_for_mask_1): Likewise.
* expr.c (do_store_flag): Likewise.
* doc/md.texi (@code{vec_cmpeq@var{m}@var{n}},
@code{vcondeq@var{m}@var{n}}): Document.
* config/i386/sse.md (vec_cmpeqv2div2di, vcondeq<VI8F_128:mode>v2di):
New expanders.
testsuite/
* gcc.target/i386/pr78102.c: New test.

From-SVN: r241525
14 files changed:
gcc/ChangeLog
gcc/config/i386/sse.md
gcc/doc/md.texi
gcc/expr.c
gcc/optabs-query.h
gcc/optabs-tree.c
gcc/optabs-tree.h
gcc/optabs.c
gcc/optabs.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr78102.c [new file with mode: 0644]
gcc/tree-vect-generic.c
gcc/tree-vect-patterns.c
gcc/tree-vect-stmts.c