diff options
author | Ilya Leoshkevich <iii@linux.ibm.com> | 2019-10-07 15:01:15 +0000 |
---|---|---|
committer | Ilya Leoshkevich <iii@gcc.gnu.org> | 2019-10-07 15:01:15 +0000 |
commit | dcd2ca63ec5c467decb70db983fc19a8329f67dc (patch) | |
tree | 57e8c3ef3613a9b118825f76b0390c14d6429549 /gcc/optabs.h | |
parent | 70e2a30ac8f474feefbcc392cbc59cf91271b92b (diff) | |
download | gcc-dcd2ca63ec5c467decb70db983fc19a8329f67dc.zip gcc-dcd2ca63ec5c467decb70db983fc19a8329f67dc.tar.gz gcc-dcd2ca63ec5c467decb70db983fc19a8329f67dc.tar.bz2 |
Introduce can_vcond_compare_p function
z13 supports only non-signaling vector comparisons. This means we
cannot vectorize LT, LE, GT, GE and LTGT when compiling for z13.
However, we cannot express this restriction today: the code only checks
whether vcond$a$b optab exists, but this does not say anything about the
operation.
Introduce a function that checks whether back-end supports vector
comparisons with individual rtx codes by matching vcond expander's third
argument with a fake comparison with the corresponding rtx code.
gcc/ChangeLog:
2019-10-07 Ilya Leoshkevich <iii@linux.ibm.com>
PR target/77918
* optabs-tree.c (vcond_icode_p): New function.
(vcond_eq_icode_p): Likewise.
(expand_vec_cond_expr_p): Use vcond_icode_p and
vcond_eq_icode_p.
* optabs.c (can_vcond_compare_p): New function.
* optabs.h (can_vcond_compare_p): Likewise.
From-SVN: r276660
Diffstat (limited to 'gcc/optabs.h')
-rw-r--r-- | gcc/optabs.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/optabs.h b/gcc/optabs.h index 897bb5d..b1348ce 100644 --- a/gcc/optabs.h +++ b/gcc/optabs.h @@ -242,6 +242,12 @@ enum can_compare_purpose (without splitting it into pieces). */ extern int can_compare_p (enum rtx_code, machine_mode, enum can_compare_purpose); + +/* Return whether the backend can emit a vector comparison for code CODE, + comparing operands of mode CMP_OP_MODE and producing a result with + VALUE_MODE. */ +extern bool can_vcond_compare_p (enum rtx_code, machine_mode, machine_mode); + extern rtx prepare_operand (enum insn_code, rtx, int, machine_mode, machine_mode, int); /* Emit a pair of rtl insns to compare two rtx's and to jump |