From 195cabaab83e5c30b72d648680a0fff5e4dddcd7 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 29 May 2025 21:25:19 +0100 Subject: [PATCH] 8.5.0-27 Fix folding of BIT_NOT_EXPR for POLY_INT_CST (PR 118976, RHEL-90240) Resolves: RHEL-90240 --- gcc.spec | 7 ++++- gcc8-pr118976.patch | 64 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 gcc8-pr118976.patch diff --git a/gcc.spec b/gcc.spec index 5cf5c96..883177b 100644 --- a/gcc.spec +++ b/gcc.spec @@ -5,7 +5,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 26 +%global gcc_release 27 %global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f %global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24 %global _unpackaged_files_terminate_build 0 @@ -309,6 +309,7 @@ Patch47: gcc8-pr111039.patch Patch48: gcc8-pr111070.patch Patch49: gcc8-RHEL-32886.patch Patch50: gcc8-pr100508.patch +Patch51: gcc8-pr118976.patch # Any patches changing libstdc++-v3/python and its tests should go after this. Patch1000: gcc8-libstdc++-prettyprinter-update-14.patch @@ -941,6 +942,7 @@ so that there cannot be any synchronization problems. %patch48 -p1 -b .pr111070~ %patch49 -p0 -b .32886~ %patch50 -p1 -b .pr100508~ +%patch51 -p1 -b .pr118976~ %patch1000 -p1 -b .libstdc++-prettyprinter-update-14~ %patch1001 -p1 -b .libstdc++-prettyprinter-update-14-tests~ @@ -3354,6 +3356,9 @@ fi %{ANNOBIN_GCC_PLUGIN_DIR}/gcc-annobin.so.0.0.0 %changelog +* Thu May 29 2025 Joseph Myers - 8.5.0-27 +- Fix folding of BIT_NOT_EXPR for POLY_INT_CST (PR 118976, RHEL-90240) + * Fri Mar 21 2025 Siddhesh Poyarekar 8.5.0-26 - Pin modification time for python files to SOURCE_DATE_EPOCH (RHEL-50290). diff --git a/gcc8-pr118976.patch b/gcc8-pr118976.patch new file mode 100644 index 0000000..b19181d --- /dev/null +++ b/gcc8-pr118976.patch @@ -0,0 +1,64 @@ +Original patch (taken from GCC 12 branch version) edited for GCC 8 to +use .c rather than .cc filenames and to update aarch64.c changes to +apply to GCC 8. + +commit 587b370c8492aadaab14c57e242c66778cc78891 +Author: Richard Sandiford +Date: Tue Mar 11 15:51:55 2025 +0000 + + Fix folding of BIT_NOT_EXPR for POLY_INT_CST [PR118976] + + There was an embarrassing typo in the folding of BIT_NOT_EXPR for + POLY_INT_CSTs: it used - rather than ~ on the poly_int. Not sure + how that happened, but it might have been due to the way that + ~x is implemented as -1 - x internally. + + gcc/ + PR tree-optimization/118976 + * fold-const.cc (const_unop): Use ~ rather than - for BIT_NOT_EXPR. + * config/aarch64/aarch64.cc (aarch64_test_sve_folding): New function. + (aarch64_run_selftests): Run it. + + (cherry picked from commit 78380fd7f743e23dfdf013d68a2f0347e1511550) + +diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c +index be0d958dcf6b..72d737d62228 100644 +--- a/gcc/config/aarch64/aarch64.c ++++ b/gcc/config/aarch64/aarch64.c +@@ -27541,6 +27541,16 @@ aarch64_test_fractional_cost () + ASSERT_EQ (SImode, GET_MODE (crtl->return_rtx)); + } + ++/* Test SVE arithmetic folding. */ ++ ++static void ++aarch64_test_sve_folding () ++{ ++ tree res = fold_unary (BIT_NOT_EXPR, ssizetype, ++ ssize_int (poly_int64 (1, 1))); ++ ASSERT_TRUE (operand_equal_p (res, ssize_int (poly_int64 (-2, -1)))); ++} ++ + /* Run all target-specific selftests. */ + + static void +@@ -27548,5 +27558,6 @@ aarch64_run_selftests (void) + { + aarch64_test_loading_full_dump (); ++ aarch64_test_sve_folding (); + } + + } // namespace selftest +diff --git a/gcc/fold-const.c b/gcc/fold-const.c +index d81a71c41a17..391f11095408 100644 +--- a/gcc/fold-const.c ++++ b/gcc/fold-const.c +@@ -1802,7 +1802,7 @@ const_unop (enum tree_code code, tree type, tree arg0) + if (TREE_CODE (arg0) == INTEGER_CST) + return fold_not_const (arg0, type); + else if (POLY_INT_CST_P (arg0)) +- return wide_int_to_tree (type, -poly_int_cst_value (arg0)); ++ return wide_int_to_tree (type, ~poly_int_cst_value (arg0)); + /* Perform BIT_NOT_EXPR on each element individually. */ + else if (TREE_CODE (arg0) == VECTOR_CST) + {