GCC Bugzilla – Attachment 51621 Details for
Bug 102788
[11 Regression] Wrong code with -O3
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch I am testing
p (text/plain), 3.43 KB, created by
Richard Biener
on 2021-10-18 08:40:26 UTC
(
hide
)
Description:
patch I am testing
Filename:
MIME Type:
Creator:
Richard Biener
Created:
2021-10-18 08:40:26 UTC
Size:
3.43 KB
patch
obsolete
>From da40b06d6972c376b1cc84f5dbd7207b50c8a11e Mon Sep 17 00:00:00 2001 >From: Richard Biener <rguenther@suse.de> >Date: Mon, 18 Oct 2021 10:31:19 +0200 >Subject: [PATCH] tree-optimization/102788 - avoid spurious bool pattern fails >To: gcc-patches@gcc.gnu.org > >Bool pattern recog is required for correctness since vectorized >compares otherwise produce -1 for true so any context where bool >is used as value and not as condition or mask needs to be replaced >with CMP ? 1 : 0. When we fail to find a vector type for the >result of such use we may not simply elide such transform since >a new bool result can emerge when for example the cast_forwprop >pattern is applied. So the following avoids failing of the >bool pattern recog process and instead not assign a vector type >for the stmt. > >2021-10-18 Richard Biener <rguenther@suse.de> > > PR tree-optimization/102788 > * tree-vect-patterns.c (vect_init_pattern_stmt): Allow > a NULL vectype. > (vect_pattern_recog_1): Likewise. > (vect_recog_bool_pattern): Continue matching the pattern > even if we do not have a vector type for a conversion > result. > > * g++.dg/vect/pr102788.cc: New testcase. >--- > gcc/testsuite/g++.dg/vect/pr102788.cc | 32 +++++++++++++++++++++++++++ > gcc/tree-vect-patterns.c | 8 +++---- > 2 files changed, 35 insertions(+), 5 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/vect/pr102788.cc > >diff --git a/gcc/testsuite/g++.dg/vect/pr102788.cc b/gcc/testsuite/g++.dg/vect/pr102788.cc >new file mode 100644 >index 00000000000..fa9c366fe56 >--- /dev/null >+++ b/gcc/testsuite/g++.dg/vect/pr102788.cc >@@ -0,0 +1,32 @@ >+// { dg-do run } >+// { dg-additional-options "-O3" } >+ >+unsigned long long int var_4 = 235; >+unsigned long long int var_5 = 74; >+signed char var_12 = -99; >+unsigned long long int var_349; >+unsigned char var_645; >+void test(); >+ >+const unsigned long long &min(const unsigned long long &a, >+ const unsigned long long &b) >+{ >+ return b < a ? b : a; >+} >+ >+void __attribute__((noipa)) test() >+{ >+ for (short c = var_12; c; c += 5) >+ ; >+ for (int e = 0; e < 12; e += 1) { >+ var_349 = var_4 ? 235 : 74; >+ var_645 = min((unsigned long long)true, var_5 ? var_12 : var_4); >+ } >+} >+ >+int main() >+{ >+ test(); >+ if (var_645 != 1) >+ __builtin_abort(); >+} >diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c >index e6c5bcdad36..854cbcff390 100644 >--- a/gcc/tree-vect-patterns.c >+++ b/gcc/tree-vect-patterns.c >@@ -119,8 +119,9 @@ vect_init_pattern_stmt (vec_info *vinfo, gimple *pattern_stmt, > = STMT_VINFO_DEF_TYPE (orig_stmt_info); > if (!STMT_VINFO_VECTYPE (pattern_stmt_info)) > { >- gcc_assert (VECTOR_BOOLEAN_TYPE_P (vectype) >- == vect_use_mask_type_p (orig_stmt_info)); >+ gcc_assert (!vectype >+ || (VECTOR_BOOLEAN_TYPE_P (vectype) >+ == vect_use_mask_type_p (orig_stmt_info))); > STMT_VINFO_VECTYPE (pattern_stmt_info) = vectype; > pattern_stmt_info->mask_precision = orig_stmt_info->mask_precision; > } >@@ -4283,8 +4284,6 @@ vect_recog_bool_pattern (vec_info *vinfo, > || VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (lhs))) > return NULL; > vectype = get_vectype_for_scalar_type (vinfo, TREE_TYPE (lhs)); >- if (vectype == NULL_TREE) >- return NULL; > > if (check_bool_pattern (var, vinfo, bool_stmts)) > { >@@ -5696,7 +5695,6 @@ vect_pattern_recog_1 (vec_info *vinfo, > } > > loop_vinfo = dyn_cast <loop_vec_info> (vinfo); >- gcc_assert (pattern_vectype); > > /* Found a vectorizable pattern. */ > if (dump_enabled_p ()) >-- >2.31.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 102788
: 51621