diff options
Diffstat (limited to '15.0.0/gentoo/70_all_middle-end-check-explicitly-for-external-or-constant.patch')
-rw-r--r-- | 15.0.0/gentoo/70_all_middle-end-check-explicitly-for-external-or-constant.patch | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/15.0.0/gentoo/70_all_middle-end-check-explicitly-for-external-or-constant.patch b/15.0.0/gentoo/70_all_middle-end-check-explicitly-for-external-or-constant.patch deleted file mode 100644 index 7dcf89d..0000000 --- a/15.0.0/gentoo/70_all_middle-end-check-explicitly-for-external-or-constant.patch +++ /dev/null @@ -1,88 +0,0 @@ -https://inbox.sourceware.org/gcc-patches/patch-18806-tamar@arm.com/T/#u -https://gcc.gnu.org/PR116817 - -From 9a5d1eb943dcaf26551b534eb62cbf1dd8443335 Mon Sep 17 00:00:00 2001 -Message-ID: <9a5d1eb943dcaf26551b534eb62cbf1dd8443335.1727104663.git.sam@gentoo.org> -From: Tamar Christina <tamar.christina@arm.com> -Date: Mon, 23 Sep 2024 15:29:52 +0100 -Subject: [PATCH] middle-end: check explicitly for external or constants when - checking for loop invariant [PR116817] - -Hi All, - -The previous check if a value was external was checking -!vect_get_internal_def (vinfo, var) but this of course isn't completely right -as they could reductions etc. - -This changes the check to just explicitly look at externals and constants. -Note that reductions remain unhandled here, but we don't support codegen of -boolean reductions today anyway. - -So at the time we do then this would have the be handled as well in lowering. - -Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. - -Ok for master? - -Thanks, -Tamar - -gcc/ChangeLog: - - PR tree-optimization/116817 - * tree-vect-patterns.cc (vect_recog_bool_pattern): Check for const or - externals. - -gcc/testsuite/ChangeLog: - -PR tree-optimization/116817 - * g++.dg/vect/pr116817.cc: New test. ---- - gcc/testsuite/g++.dg/vect/pr116817.cc | 16 ++++++++++++++++ - gcc/tree-vect-patterns.cc | 5 ++++- - 2 files changed, 20 insertions(+), 1 deletion(-) - create mode 100644 gcc/testsuite/g++.dg/vect/pr116817.cc - -diff --git a/gcc/testsuite/g++.dg/vect/pr116817.cc b/gcc/testsuite/g++.dg/vect/pr116817.cc -new file mode 100644 -index 00000000000..7e28982fb13 ---- /dev/null -+++ b/gcc/testsuite/g++.dg/vect/pr116817.cc -@@ -0,0 +1,16 @@ -+/* { dg-do compile } */ -+/* { dg-additional-options "-O3" } */ -+ -+int main_ulData0; -+unsigned *main_pSrcBuffer; -+int main(void) { -+ int iSrc = 0; -+ bool bData0; -+ for (; iSrc < 4; iSrc++) { -+ if (bData0) -+ main_pSrcBuffer[iSrc] = main_ulData0; -+ else -+ main_pSrcBuffer[iSrc] = 0; -+ bData0 = !bData0; -+ } -+} -diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc -index e7e877dd2adb55262822f1660f8d92b42d44e6d0..f0298b2ab97a1e7dd0d943340e1389c3c0fa796e 100644 ---- a/gcc/tree-vect-patterns.cc -+++ b/gcc/tree-vect-patterns.cc -@@ -6062,12 +6062,15 @@ vect_recog_bool_pattern (vec_info *vinfo, - if (get_vectype_for_scalar_type (vinfo, type) == NULL_TREE) - return NULL; - -+ stmt_vec_info var_def_info = vinfo->lookup_def (var); - if (check_bool_pattern (var, vinfo, bool_stmts)) - var = adjust_bool_stmts (vinfo, bool_stmts, type, stmt_vinfo); - else if (integer_type_for_mask (var, vinfo)) - return NULL; - else if (TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE -- && !vect_get_internal_def (vinfo, var)) -+ && (!var_def_info -+ || STMT_VINFO_DEF_TYPE (var_def_info) == vect_external_def -+ || STMT_VINFO_DEF_TYPE (var_def_info) == vect_constant_def)) - { - /* If the condition is already a boolean then manually convert it to a - mask of the given integer type but don't set a vectype. */ |