aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPan Li <pan2.li@intel.com>2024-10-14 10:09:31 +0800
committerPan Li <pan2.li@intel.com>2024-10-21 22:12:08 +0800
commit2987ca61003ee7d55b8b005ab4c9c679efc9558b (patch)
tree58f388d0fdb33aa34583fbbb163fc134335f80e2 /gcc
parentbdbb74e38f30827568ba1224d52f5c86edb5d48c (diff)
downloadgcc-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.cc4
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]);