diff options
Diffstat (limited to 'sys-devel/gcc/files')
2 files changed, 104 insertions, 0 deletions
diff --git a/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109462-clang-LocalizationChecker-ranger-any-PHI.patch b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109462-clang-LocalizationChecker-ranger-any-PHI.patch new file mode 100644 index 000000000000..2b5ea5ad826a --- /dev/null +++ b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109462-clang-LocalizationChecker-ranger-any-PHI.patch @@ -0,0 +1,46 @@ +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109462 +https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=24af552876eff707f75d30d3f0f0e7a5d62dd857 + +From 24af552876eff707f75d30d3f0f0e7a5d62dd857 Mon Sep 17 00:00:00 2001 +From: Andrew MacLeod <amacleod@redhat.com> +Date: Tue, 11 Apr 2023 17:29:03 -0400 +Subject: [PATCH] Don't use ANY PHI equivalences in range-on-entry. + +PR 108139 dissallows PHI equivalencies in the on-entry calculator, but +it was only checking if the equivlaence was a PHI. In this case, NAME +itself is a PHI with an equivlaence caused by an undefined value, so we +also need to check that case. Unfortunately this un-fixes 101912. + + PR tree-optimization/109462 + gcc/ + * gimple-range-cache.cc (ranger_cache::fill_block_cache): Don't + check for equivalences if NAME is a phi node. + + gcc/testsuite/ + * gcc.dg/uninit-pr101912.c: XFAIL the warning. +--- a/gcc/gimple-range-cache.cc ++++ b/gcc/gimple-range-cache.cc +@@ -1218,7 +1218,9 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb) + fprintf (dump_file, "\n"); + } + // See if any equivalences can refine it. +- if (m_oracle) ++ // PR 109462, like 108139 below, a one way equivalence introduced ++ // by a PHI node can also be through the definition side. Disallow it. ++ if (m_oracle && !is_a<gphi *> (SSA_NAME_DEF_STMT (name))) + { + tree equiv_name; + relation_kind rel; +--- a/gcc/testsuite/gcc.dg/uninit-pr101912.c ++++ b/gcc/testsuite/gcc.dg/uninit-pr101912.c +@@ -11,7 +11,7 @@ tzloadbody (void) + for (int i = 0; i < n; i++) + { + int corr = getint (); +- if (corr < 1 || (corr == 1 && !(leapcnt == 0 || (prevcorr < corr ? corr == prevcorr + 1 : (corr == prevcorr || corr == prevcorr - 1))))) /* { dg-bogus "uninitialized" } */ ++ if (corr < 1 || (corr == 1 && !(leapcnt == 0 || (prevcorr < corr ? corr == prevcorr + 1 : (corr == prevcorr || corr == prevcorr - 1))))) /* { dg-bogus "uninitialized" "pr101912" { xfail *-*-* } } */ + return -1; + + prevcorr = corr; +-- +2.31.1 diff --git a/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109473-ICE-reduction-epilog.patch b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109473-ICE-reduction-epilog.patch new file mode 100644 index 000000000000..cab26653a09d --- /dev/null +++ b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109473-ICE-reduction-epilog.patch @@ -0,0 +1,58 @@ +https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=df7f55cb2ae550adeda339a57b657ebe1ad39367 +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109473 + +From df7f55cb2ae550adeda339a57b657ebe1ad39367 Mon Sep 17 00:00:00 2001 +From: Richard Biener <rguenther@suse.de> +Date: Wed, 12 Apr 2023 10:22:08 +0200 +Subject: [PATCH] tree-optimization/109473 - ICE with reduction epilog + adjustment op + +The following makes sure to carry out the reduction epilog adjustment +in the original computation type which for pointers is an unsigned +integer type. There's a similar issue with signed vs. unsigned ops +and overflow which is fixed by this as well. + + PR tree-optimization/109473 + * tree-vect-loop.cc (vect_create_epilog_for_reduction): + Convert scalar result to the computation type before performing + the reduction adjustment. + + * gcc.dg/vect/pr109473.c: New testcase. +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/vect/pr109473.c +@@ -0,0 +1,16 @@ ++/* { dg-do compile } */ ++/* { dg-additional-options "-O" } */ ++ ++struct spa_buffer { ++ __UINT32_TYPE__ *metas; ++}; ++void do_port_use_buffers(struct spa_buffer **buffers, void *endptr, void *mem) ++{ ++ for (int i = 0; i < 128; i++) ++ { ++ for (int j = 0; j < 128; j++) ++ endptr = (void *)((__UINTPTR_TYPE__)endptr + buffers[i]->metas[j]); ++ if (endptr > mem) ++ return; ++ } ++} +--- a/gcc/tree-vect-loop.cc ++++ b/gcc/tree-vect-loop.cc +@@ -6297,9 +6297,12 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, + { + new_temp = scalar_results[0]; + gcc_assert (TREE_CODE (TREE_TYPE (adjustment_def)) != VECTOR_TYPE); +- adjustment_def = gimple_convert (&stmts, scalar_type, adjustment_def); +- new_temp = gimple_build (&stmts, code, scalar_type, ++ adjustment_def = gimple_convert (&stmts, TREE_TYPE (vectype), ++ adjustment_def); ++ new_temp = gimple_convert (&stmts, TREE_TYPE (vectype), new_temp); ++ new_temp = gimple_build (&stmts, code, TREE_TYPE (vectype), + new_temp, adjustment_def); ++ new_temp = gimple_convert (&stmts, scalar_type, new_temp); + } + + epilog_stmt = gimple_seq_last_stmt (stmts); +-- +2.31.1 |