diff --git a/0190-Fix-fails-in-IPA-prefetch-src-openEuler-gcc-I96ID7.patch b/0190-Fix-fails-in-IPA-prefetch-src-openEuler-gcc-I96ID7.patch new file mode 100644 index 0000000000000000000000000000000000000000..d771e9e8aab2b09616f27765b8423784205d7723 --- /dev/null +++ b/0190-Fix-fails-in-IPA-prefetch-src-openEuler-gcc-I96ID7.patch @@ -0,0 +1,94 @@ +From ba2e4f63db88bc914dff57545df548acc946f6fc Mon Sep 17 00:00:00 2001 +From: Diachkov Ilia +Date: Thu, 21 Mar 2024 19:55:44 +0800 +Subject: [PATCH] Fix fails in IPA prefetch (src-openEuler/gcc: I96ID7) + +--- + gcc/ipa-prefetch.c | 28 ++++++++++++++++++++++++++-- + 1 file changed, 26 insertions(+), 2 deletions(-) + +diff --git a/gcc/ipa-prefetch.c b/gcc/ipa-prefetch.c +index 96a3d2bad..e5bafcf28 100644 +--- a/gcc/ipa-prefetch.c ++++ b/gcc/ipa-prefetch.c +@@ -366,6 +366,7 @@ typedef std::map memref_map; + typedef std::map memref_tree_map; + + typedef std::set stmt_set; ++typedef std::set tree_set; + typedef std::map tree_map; + + tree_memref_map *tm_map; +@@ -1125,8 +1126,21 @@ analyse_loops () + } + } + ++/* Compare memrefs by IDs; helper for qsort. */ ++ ++static int ++memref_id_cmp (const void *p1, const void *p2) ++{ ++ const memref_t *mr1 = *(const memref_t **) p1; ++ const memref_t *mr2 = *(const memref_t **) p2; ++ ++ if ((unsigned) mr1->mr_id > (unsigned) mr2->mr_id) ++ return 1; ++ return -1; ++} ++ + /* Reduce the set filtering out memrefs with the same memory references, +- return the result vector of memrefs. */ ++ sort and return the result vector of memrefs. */ + + static void + reduce_memref_set (memref_set *set, vec &vec) +@@ -1163,6 +1177,7 @@ reduce_memref_set (memref_set *set, vec &vec) + vec.safe_push (mr1); + } + } ++ vec.qsort (memref_id_cmp); + if (dump_file) + { + fprintf (dump_file, "MRs (%d) after filtering: ", vec.length ()); +@@ -1664,10 +1679,15 @@ optimize_function (cgraph_node *n, function *fn) + } + + /* Create other new vars. Insert new stmts. */ ++ vec used_mr_vec = vNULL; + for (memref_set::const_iterator it = used_mrs.begin (); + it != used_mrs.end (); it++) ++ used_mr_vec.safe_push (*it); ++ used_mr_vec.qsort (memref_id_cmp); ++ ++ for (unsigned int j = 0; j < used_mr_vec.length (); j++) + { +- memref_t *mr = *it; ++ memref_t *mr = used_mr_vec[j]; + if (mr == comp_mr) + continue; + gimple *last_stmt = gimple_copy_and_remap_memref_stmts (mr, stmts, 0, +@@ -1703,6 +1723,7 @@ optimize_function (cgraph_node *n, function *fn) + local = integer_three_node; + break; + } ++ tree_set prefetched_addrs; + for (unsigned int j = 0; j < vmrs.length (); j++) + { + memref_t *mr = vmrs[j]; +@@ -1715,10 +1736,13 @@ optimize_function (cgraph_node *n, function *fn) + tree addr = get_mem_ref_address_ssa_name (mr->mem, NULL_TREE); + if (decl_map->count (addr)) + addr = (*decl_map)[addr]; ++ if (prefetched_addrs.count (addr)) ++ continue; + last_stmt = gimple_build_call (builtin_decl_explicit (BUILT_IN_PREFETCH), + 3, addr, write_p, local); + pcalls.safe_push (last_stmt); + gimple_seq_add_stmt (&stmts, last_stmt); ++ prefetched_addrs.insert (addr); + if (dump_file) + { + fprintf (dump_file, "Insert %d prefetch stmt:\n", j); +-- +2.33.0 + diff --git a/gcc.spec b/gcc.spec index 4355aa37c49c4a367373f11c3c9a3d5a33189741..952fab335d2718246d0e48e31932739436251eae 100644 --- a/gcc.spec +++ b/gcc.spec @@ -61,7 +61,7 @@ Summary: Various compilers (C, C++, Objective-C, ...) Name: gcc Version: %{gcc_version} -Release: 53 +Release: 54 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD URL: https://gcc.gnu.org @@ -297,6 +297,7 @@ Patch186: 0186-Loop-CRC-Solving-the-problem-of-insufficient-CRC-tab.patch Patch187: 0187-Add-IPA-prefetch-test.patch Patch188: 0188-Fix-fails-in-ICP-for-src-openEuler-gcc-I90P7M-I91CZ8.patch Patch189: 0189-Add-hip11-CPU-pipeline-scheduling.patch +Patch190: 0190-Fix-fails-in-IPA-prefetch-src-openEuler-gcc-I96ID7.patch %global gcc_target_platform %{_arch}-linux-gnu @@ -939,6 +940,7 @@ not stable, so plugins must be rebuilt any time GCC is updated. %patch187 -p1 %patch188 -p1 %patch189 -p1 +%patch190 -p1 %build @@ -2968,6 +2970,12 @@ end %doc rpm.doc/changelogs/libcc1/ChangeLog* %changelog +* Thu Aug 1 2024 Chenhui Zheng - 10.3.1-54 +- Type:Sync +- ID:NA +- SUG:NA +- DESC: Sync patch from openeuler/gcc + * Mon Apr 15 2024 huyubiao - 10.3.1-53 - Type:SPEC - ID:NA