Introduce can_vec_cmp_compare_p
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 24 Nov 2020 22:45:59 +0000 (23:45 +0100)
committerIlya Leoshkevich <iii@linux.ibm.com>
Tue, 1 Dec 2020 11:03:30 +0000 (12:03 +0100)
commit3940daff128a995693b405f47dc706b9622c861b
treede52504f33f2fccc221bd94ad8afc1d0cdb780e6
parent0fb378761f2c5eb906bf0a9698112dd65d4dc73b
Introduce can_vec_cmp_compare_p

This is the same as dcd2ca63ec5c ("Introduce can_vcond_compare_p
function"), but for vec_cmp.  The reason it's needed is that since
5d9ade39b872 ("IBM Z: Fix PR97326: Enable fp compares in vec_cmp")
and 4acba4859013 ("IBM Z: Restrict vec_cmp<m><n> on z13") s390's vec_cmp
expander advertises that it supports floating point comparisons except
signaling ones on z13, but the common code ignores the latter
restriction.

gcc/ChangeLog:

2020-11-25  Ilya Leoshkevich  <iii@linux.ibm.com>

* optabs-tree.c (vec_cmp_icode_p): New function.
(vec_cmp_eq_icode_p): New function.
(expand_vec_cmp_expr_p): Use vec_cmp_icode_p and
vec_cmp_eq_icode_p.
(vcond_icode_p): Use get_rtx_code_1, just to be uniform with
vec_cmp_icode_p.
* optabs.c (unsigned_optab_p): New function.
(insn_predicate_matches_p): New function.
(can_vec_cmp_compare_p): New function.
(can_vcond_compare_p): Use unsigned_optab_p and
insn_predicate_matches_p.
(get_rtx_code): Use get_rtx_code_1.
(get_rtx_code_1): Version of get_rtx_code that returns UNKNOWN
instead of asserting.
* optabs.h (can_vec_cmp_compare_p): New function.
(get_rtx_code_1): New function.
gcc/optabs-tree.c
gcc/optabs.c
gcc/optabs.h