diff --git a/gcc.spec b/gcc.spec index 33996de..333af3d 100644 --- a/gcc.spec +++ b/gcc.spec @@ -4,7 +4,7 @@ %global gcc_major 8 # Note, gcc_release must be integer, if you want to add suffixes to # %%{release}, append them after %%{gcc_release} on Release: line. -%global gcc_release 21 +%global gcc_release 22 %global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f %global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24 %global _unpackaged_files_terminate_build 0 @@ -306,6 +306,7 @@ Patch45: gcc8-pr99074.patch Patch46: gcc8-pr87723.patch Patch47: gcc8-pr111039.patch Patch48: gcc8-pr111070.patch +Patch49: gcc8-RHEL-32886.patch Patch1000: nvptx-tools-no-ptxas.patch Patch1001: nvptx-tools-build.patch @@ -929,6 +930,7 @@ so that there cannot be any synchronization problems. %patch46 -p1 -b .pr87723~ %patch47 -p1 -b .pr111039~ %patch48 -p1 -b .pr111070~ +%patch49 -p0 -b .32886~ cd nvptx-tools-%{nvptx_tools_gitrev} %patch1000 -p1 -b .nvptx-tools-no-ptxas~ @@ -3336,6 +3338,9 @@ fi %{ANNOBIN_GCC_PLUGIN_DIR}/gcc-annobin.so.0.0.0 %changelog +* Thu Apr 18 2024 Marek Polacek 8.5.0-22 +- fix ICE in the vectorizer (RHEL-32886) + * Wed Oct 4 2023 Marek Polacek 8.5.0-21 - guard the bit test merging code in if-combine (RHEL-11483) diff --git a/gcc8-RHEL-32886.patch b/gcc8-RHEL-32886.patch new file mode 100644 index 0000000..5ba9026 --- /dev/null +++ b/gcc8-RHEL-32886.patch @@ -0,0 +1,59 @@ +2024-04-18 Jakub Jelinek + + * tree-vect-stmts.c (vectorizable_call): For j == 0 use + vargs.safe_grow (nargs) rather than vargs.create (nargs), for j != 0 + remove vargs.truncate (0). Instead of vargs.quick_push store into + vargs[i]. Use vargs[i] instead of gimple_call_arg (new_stmt, i) + if j != 0. + + * gcc.c-torture/compile/20240418.c: New test. + +--- gcc/tree-vect-stmts.c.jj 2021-04-22 15:48:48.228178359 +0200 ++++ gcc/tree-vect-stmts.c 2024-04-18 13:21:46.104061529 +0200 +@@ -3242,9 +3242,7 @@ vectorizable_call (gimple *gs, gimple_st + { + /* Build argument list for the vectorized call. */ + if (j == 0) +- vargs.create (nargs); +- else +- vargs.truncate (0); ++ vargs.safe_grow (nargs); + + if (slp_node) + { +@@ -3252,7 +3250,7 @@ vectorizable_call (gimple *gs, gimple_st + vec vec_oprnds0; + + for (i = 0; i < nargs; i++) +- vargs.quick_push (gimple_call_arg (stmt, i)); ++ vargs[i] = gimple_call_arg (stmt, i); + vect_get_slp_defs (vargs, slp_node, &vec_defs); + vec_oprnds0 = vec_defs[0]; + +@@ -3314,13 +3312,10 @@ vectorizable_call (gimple *gs, gimple_st + vec_oprnd0 + = vect_get_vec_def_for_operand (op, stmt); + else +- { +- vec_oprnd0 = gimple_call_arg (new_stmt, i); +- vec_oprnd0 +- = vect_get_vec_def_for_stmt_copy (dt[i], vec_oprnd0); +- } ++ vec_oprnd0 ++ = vect_get_vec_def_for_stmt_copy (dt[i], vargs[i]); + +- vargs.quick_push (vec_oprnd0); ++ vargs[i] = vec_oprnd0; + } + + if (gimple_call_internal_p (stmt) +--- gcc/testsuite/gcc.c-torture/compile/20240418.c.jj 2024-04-18 13:24:10.180065661 +0200 ++++ gcc/testsuite/gcc.c-torture/compile/20240418.c 2024-04-18 13:19:12.166194018 +0200 +@@ -0,0 +1,7 @@ ++void ++foo (signed char *p, unsigned long long *q) ++{ ++ int i; ++ for (i = 0; i <= 64; i++) ++ *p++ = __builtin_popcountll (*q++); ++}