Add vect_recog_cond_expr_convert_pattern.
authorliuhongt <hongtao.liu@intel.com>
Mon, 24 Jan 2022 03:05:47 +0000 (11:05 +0800)
committerliuhongt <hongtao.liu@intel.com>
Sun, 13 Feb 2022 09:57:38 +0000 (17:57 +0800)
commit7e204bd2f189850cb940677c99d8d93eb7dd40cd
tree3d8eb6dd756e3aa0792cd257f77689c2450155ac
parent23756b70630d6576c9d498cc85ae1dde38a1d5d0
Add vect_recog_cond_expr_convert_pattern.

The pattern converts (cond (cmp a b) (convert c) (convert d))
to (convert (cond (cmp a b) c d)) when
1) types_match (c, d)
2) single_use for (convert c) and (convert d)
3) TYPE_PRECISION (TREE_TYPE (c)) == TYPE_PRECISION (TREE_TYPE (a))
4) INTEGERAL_TYPE_P (TREE_TYPE (c))

The pattern can save packing of mask and data(partial for data, 2 vs
1).

gcc/ChangeLog:

PR target/103771
* match.pd (cond_expr_convert_p): New match.
* tree-vect-patterns.cc (gimple_cond_expr_convert_p): Declare.
(vect_recog_cond_expr_convert_pattern): New.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr103771-2.c: New test.
* gcc.target/i386/pr103771-3.c: New test.
gcc/match.pd
gcc/testsuite/gcc.target/i386/pr103771-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr103771-3.c [new file with mode: 0644]
gcc/tree-vect-patterns.cc