diff options
author | Pan Li <pan2.li@intel.com> | 2024-10-14 10:09:31 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2024-10-21 22:12:08 +0800 |
commit | 2987ca61003ee7d55b8b005ab4c9c679efc9558b (patch) | |
tree | 58f388d0fdb33aa34583fbbb163fc134335f80e2 /gcc | |
parent | bdbb74e38f30827568ba1224d52f5c86edb5d48c (diff) | |
download | gcc-2987ca61003ee7d55b8b005ab4c9c679efc9558b.zip gcc-2987ca61003ee7d55b8b005ab4c9c679efc9558b.tar.gz gcc-2987ca61003ee7d55b8b005ab4c9c679efc9558b.tar.bz2 |
Vect: Try the pattern of vector signed integer SAT_TRUNC
Almost the same as vector unsigned integer SAT_TRUNC, try to match
the signed version during the vector pattern matching.
The below test suites are passed for this patch.
* The rv64gcv fully regression test.
* The x86 bootstrap test.
* The x86 fully regression test.
gcc/ChangeLog:
* tree-vect-patterns.cc (gimple_signed_integer_sat_trunc): Add
new func decl for signed SAT_TRUNC.
(vect_recog_sat_trunc_pattern): Try signed match pattern for
the SAT_TRUNC.
Signed-off-by: Pan Li <pan2.li@intel.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-patterns.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index 746f100..ce5a528 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -4539,6 +4539,7 @@ extern bool gimple_unsigned_integer_sat_trunc (tree, tree*, tree (*)(tree)); extern bool gimple_signed_integer_sat_add (tree, tree*, tree (*)(tree)); extern bool gimple_signed_integer_sat_sub (tree, tree*, tree (*)(tree)); +extern bool gimple_signed_integer_sat_trunc (tree, tree*, tree (*)(tree)); static gimple * vect_recog_build_binary_gimple_stmt (vec_info *vinfo, stmt_vec_info stmt_info, @@ -4770,7 +4771,8 @@ vect_recog_sat_trunc_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, tree lhs = gimple_assign_lhs (last_stmt); tree otype = TREE_TYPE (lhs); - if (gimple_unsigned_integer_sat_trunc (lhs, ops, NULL) + if ((gimple_unsigned_integer_sat_trunc (lhs, ops, NULL) + || gimple_signed_integer_sat_trunc (lhs, ops, NULL)) && type_has_mode_precision_p (otype)) { tree itype = TREE_TYPE (ops[0]); |