From 260ac3314702f43428ecf1fa50fb9e0f2d273e6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E9=B8=BF?= Date: Wed, 12 Mar 2025 16:28:25 +0800 Subject: [PATCH] llc feature bugfix --- 0362-fix-prefetch-case-failed.patch | 144 ++++++++++++++++++++++++++++ 0363-llc-feature-bugfix.patch | 79 +++++++++++++++ gcc.spec | 12 ++- 3 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 0362-fix-prefetch-case-failed.patch create mode 100644 0363-llc-feature-bugfix.patch diff --git a/0362-fix-prefetch-case-failed.patch b/0362-fix-prefetch-case-failed.patch new file mode 100644 index 0000000..9c21445 --- /dev/null +++ b/0362-fix-prefetch-case-failed.patch @@ -0,0 +1,144 @@ +From c7bdc03e48a0b6e213c5a4b8c821665d7ca897bb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E9=99=88=E9=B8=BF?= +Date: Thu, 6 Mar 2025 14:58:57 +0800 +Subject: [PATCH] fix prefetch case failed + +--- + gcc/params.opt | 2 +- + .../gcc.target/aarch64/sve/acle/general-c/prefetch_1.c | 6 +++--- + .../aarch64/sve/acle/general-c/prefetch_gather_index_1.c | 6 +++--- + .../aarch64/sve/acle/general-c/prefetch_gather_index_2.c | 6 +++--- + .../aarch64/sve/acle/general-c/prefetch_gather_offset_1.c | 6 +++--- + .../aarch64/sve/acle/general-c/prefetch_gather_offset_2.c | 6 +++--- + .../aarch64/sve/acle/general-c/prefetch_gather_offset_3.c | 6 +++--- + .../aarch64/sve/acle/general-c/prefetch_gather_offset_4.c | 6 +++--- + 8 files changed, 22 insertions(+), 22 deletions(-) + +diff --git a/gcc/params.opt b/gcc/params.opt +index e06e50611..a716f2cc4 100644 +--- a/gcc/params.opt ++++ b/gcc/params.opt +@@ -1305,7 +1305,7 @@ cannot recognize inner loop boundaries. + -param=llc-level= + Common Joined UInteger Var(param_llc_level) Init(3) IntegerRange(3, 4) + Param Optimization +-Specifies the HBM cache level. ++Specifies the LLC cache level. + + -param=filter-mode= + Common Joined UInteger Var(param_filter_mode) Init(1) IntegerRange(0, 1) Param +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_1.c +index 316f77fc7..c8094ba2b 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_1.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_1.c +@@ -10,8 +10,8 @@ f1 (svbool_t pg, int32_t *s32_ptr, enum svprfop op) + svprfb (pg, s32_ptr, (enum svprfop) -1); /* { dg-error {passing 4294967295 to argument 3 of 'svprfb', which expects a valid 'enum svprfop' value} } */ + svprfb (pg, s32_ptr, (enum svprfop) 0); + svprfb (pg, s32_ptr, (enum svprfop) 5); +- svprfb (pg, s32_ptr, (enum svprfop) 6); /* { dg-error {passing 6 to argument 3 of 'svprfb', which expects a valid 'enum svprfop' value} } */ +- svprfb (pg, s32_ptr, (enum svprfop) 7); /* { dg-error {passing 7 to argument 3 of 'svprfb', which expects a valid 'enum svprfop' value} } */ ++ svprfb (pg, s32_ptr, (enum svprfop) 6); ++ svprfb (pg, s32_ptr, (enum svprfop) 7); + svprfb (pg, s32_ptr, (enum svprfop) 8); +- svprfb (pg, s32_ptr, (enum svprfop) 14); /* { dg-error {passing 14 to argument 3 of 'svprfb', which expects a valid 'enum svprfop' value} } */ ++ svprfb (pg, s32_ptr, (enum svprfop) 14); + } +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_1.c +index c33c95440..862ec082b 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_1.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_1.c +@@ -46,8 +46,8 @@ f1 (svbool_t pg, int32_t *s32_ptr, void *void_ptr, void **ptr_ptr, + svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) -1); /* { dg-error {passing 4294967295 to argument 4 of 'svprfh_gather_index', which expects a valid 'enum svprfop' value} } */ + svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 0); + svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 5); +- svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 6); /* { dg-error {passing 6 to argument 4 of 'svprfh_gather_index', which expects a valid 'enum svprfop' value} } */ +- svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 7); /* { dg-error {passing 7 to argument 4 of 'svprfh_gather_index', which expects a valid 'enum svprfop' value} } */ ++ svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 6); ++ svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 7); + svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 8); +- svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 14); /* { dg-error {passing 14 to argument 4 of 'svprfh_gather_index', which expects a valid 'enum svprfop' value} } */ ++ svprfh_gather_index (pg, s32_ptr, s32, (enum svprfop) 14); + } +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_2.c +index 3d7797305..f4873c631 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_2.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_index_2.c +@@ -10,8 +10,8 @@ f1 (svbool_t pg, int32_t *s32_ptr, svint32_t s32, enum svprfop op) + svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) -1); /* { dg-error {passing 4294967295 to argument 4 of 'svprfh_gather_s32index', which expects a valid 'enum svprfop' value} } */ + svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 0); + svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 5); +- svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 6); /* { dg-error {passing 6 to argument 4 of 'svprfh_gather_s32index', which expects a valid 'enum svprfop' value} } */ +- svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 7); /* { dg-error {passing 7 to argument 4 of 'svprfh_gather_s32index', which expects a valid 'enum svprfop' value} } */ ++ svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 6); ++ svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 7); + svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 8); +- svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 14); /* { dg-error {passing 14 to argument 4 of 'svprfh_gather_s32index', which expects a valid 'enum svprfop' value} } */ ++ svprfh_gather_s32index (pg, s32_ptr, s32, (enum svprfop) 14); + } +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_1.c +index cc61901cb..3b82b4777 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_1.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_1.c +@@ -46,8 +46,8 @@ f1 (svbool_t pg, int32_t *s32_ptr, void *void_ptr, void **ptr_ptr, + svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) -1); /* { dg-error {passing 4294967295 to argument 4 of 'svprfb_gather_offset', which expects a valid 'enum svprfop' value} } */ + svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 0); + svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 5); +- svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 6); /* { dg-error {passing 6 to argument 4 of 'svprfb_gather_offset', which expects a valid 'enum svprfop' value} } */ +- svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 7); /* { dg-error {passing 7 to argument 4 of 'svprfb_gather_offset', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 6); ++ svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 7); + svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 8); +- svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 14); /* { dg-error {passing 14 to argument 4 of 'svprfb_gather_offset', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather_offset (pg, s32_ptr, s32, (enum svprfop) 14); + } +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_2.c +index 88e0c35e7..2be620de5 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_2.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_2.c +@@ -30,8 +30,8 @@ f1 (svbool_t pg, svint8_t s8, svuint8_t u8, + svprfb_gather (pg, u32, (enum svprfop) -1); /* { dg-error {passing 4294967295 to argument 3 of 'svprfb_gather', which expects a valid 'enum svprfop' value} } */ + svprfb_gather (pg, u32, (enum svprfop) 0); + svprfb_gather (pg, u32, (enum svprfop) 5); +- svprfb_gather (pg, u32, (enum svprfop) 6); /* { dg-error {passing 6 to argument 3 of 'svprfb_gather', which expects a valid 'enum svprfop' value} } */ +- svprfb_gather (pg, u32, (enum svprfop) 7); /* { dg-error {passing 7 to argument 3 of 'svprfb_gather', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather (pg, u32, (enum svprfop) 6); ++ svprfb_gather (pg, u32, (enum svprfop) 7); + svprfb_gather (pg, u32, (enum svprfop) 8); +- svprfb_gather (pg, u32, (enum svprfop) 14); /* { dg-error {passing 14 to argument 3 of 'svprfb_gather', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather (pg, u32, (enum svprfop) 14); + } +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_3.c +index 24b4aa190..9a1d931e9 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_3.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_3.c +@@ -10,8 +10,8 @@ f1 (svbool_t pg, int32_t *s32_ptr, svint32_t s32, enum svprfop op) + svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) -1); /* { dg-error {passing 4294967295 to argument 4 of 'svprfb_gather_s32offset', which expects a valid 'enum svprfop' value} } */ + svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 0); + svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 5); +- svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 6); /* { dg-error {passing 6 to argument 4 of 'svprfb_gather_s32offset', which expects a valid 'enum svprfop' value} } */ +- svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 7); /* { dg-error {passing 7 to argument 4 of 'svprfb_gather_s32offset', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 6); ++ svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 7); + svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 8); +- svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 14); /* { dg-error {passing 14 to argument 4 of 'svprfb_gather_s32offset', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather_s32offset (pg, s32_ptr, s32, (enum svprfop) 14); + } +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_4.c +index 63ccdc5a4..f7ca09507 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_4.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/prefetch_gather_offset_4.c +@@ -10,8 +10,8 @@ f1 (svbool_t pg, svuint32_t u32, enum svprfop op) + svprfb_gather_u32base (pg, u32, (enum svprfop) -1); /* { dg-error {passing 4294967295 to argument 3 of 'svprfb_gather_u32base', which expects a valid 'enum svprfop' value} } */ + svprfb_gather_u32base (pg, u32, (enum svprfop) 0); + svprfb_gather_u32base (pg, u32, (enum svprfop) 5); +- svprfb_gather_u32base (pg, u32, (enum svprfop) 6); /* { dg-error {passing 6 to argument 3 of 'svprfb_gather_u32base', which expects a valid 'enum svprfop' value} } */ +- svprfb_gather_u32base (pg, u32, (enum svprfop) 7); /* { dg-error {passing 7 to argument 3 of 'svprfb_gather_u32base', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather_u32base (pg, u32, (enum svprfop) 6); ++ svprfb_gather_u32base (pg, u32, (enum svprfop) 7); + svprfb_gather_u32base (pg, u32, (enum svprfop) 8); +- svprfb_gather_u32base (pg, u32, (enum svprfop) 14); /* { dg-error {passing 14 to argument 3 of 'svprfb_gather_u32base', which expects a valid 'enum svprfop' value} } */ ++ svprfb_gather_u32base (pg, u32, (enum svprfop) 14); + } +-- +2.44.0.windows.1 + diff --git a/0363-llc-feature-bugfix.patch b/0363-llc-feature-bugfix.patch new file mode 100644 index 0000000..57abf68 --- /dev/null +++ b/0363-llc-feature-bugfix.patch @@ -0,0 +1,79 @@ +From 9bb4c61897abb16d77a0614d4465bf2b0d67b265 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E9=99=88=E9=B8=BF?= +Date: Mon, 10 Mar 2025 17:00:37 +0800 +Subject: [PATCH] llc feature bugfix + +--- + gcc/params.opt | 2 +- + gcc/testsuite/gcc.dg/llc-allocate/llc-1.c | 2 +- + gcc/tree-ssa-llc-allocate.cc | 2 +- + gcc/tree-vect-loop.cc | 10 +++------- + 4 files changed, 6 insertions(+), 10 deletions(-) + +diff --git a/gcc/params.opt b/gcc/params.opt +index a716f2cc4..ed7559783 100644 +--- a/gcc/params.opt ++++ b/gcc/params.opt +@@ -1285,7 +1285,7 @@ Common Joined UInteger Var(param_issue_topn) Init(1) Param Optimization + Issue topn LLC mem_ref hint. + + -param=force-issue= +-Common Joined UInteger Var(param_force_issue) Init(0) IntegerRange(0, 1) Param ++Common Joined UInteger Var(param_force_issue) Init(1) IntegerRange(0, 1) Param + Force issue the topn LLC mem_ref hint, without generating dynamic multi-branches. + + -param=llc-capacity-per-core= +diff --git a/gcc/testsuite/gcc.dg/llc-allocate/llc-1.c b/gcc/testsuite/gcc.dg/llc-allocate/llc-1.c +index 091e654f9..0b81394ad 100644 +--- a/gcc/testsuite/gcc.dg/llc-allocate/llc-1.c ++++ b/gcc/testsuite/gcc.dg/llc-allocate/llc-1.c +@@ -58,4 +58,4 @@ main (int argc, char *argv[]) + /* { dg-final { scan-tree-dump "\\d\\tuPtr\\t\\(1.466660, 1, 1, 0\\)" "llc_allocate" } } */ + /* { dg-final { scan-tree-dump-times "runtime issue" 1 "llc_allocate" } } */ + /* { dg-final { scan-tree-dump-times "static issue" 2 "llc_allocate" } } */ +-/* { dg-final { scan-tree-dump-times "insert svprfd" 4 "llc_allocate" } } */ ++/* { dg-final { scan-tree-dump-times "insert svprfd" 2 "llc_allocate" } } */ +diff --git a/gcc/tree-ssa-llc-allocate.cc b/gcc/tree-ssa-llc-allocate.cc +index da6d72b94..d10d60459 100644 +--- a/gcc/tree-ssa-llc-allocate.cc ++++ b/gcc/tree-ssa-llc-allocate.cc +@@ -3822,7 +3822,7 @@ issue_llc_hint (std::vector &ref_groups, + "ref_group(s) is found for llc hint.\n", + num_issue_var, param_issue_topn); + } +- if (param_force_issue) ++ if (param_force_issue == 1 || param_force_issue == 0) + { + static_issue (ref_groups, num_issue_var); + return; +diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc +index 023a83c38..7f7577951 100644 +--- a/gcc/tree-vect-loop.cc ++++ b/gcc/tree-vect-loop.cc +@@ -9735,11 +9735,8 @@ vect_transform_loop (loop_vec_info loop_vinfo, gimple *loop_vectorized_call) + + if (LOOP_REQUIRES_VERSIONING (loop_vinfo)) + { +- class loop *sloop; +- if (!(optimize >= 2 && flag_llc_allocate > 0)) +- sloop = vect_loop_versioning (loop_vinfo, loop_vectorized_call); +- else +- sloop = vect_loop_versioning_2 (loop_vinfo, loop_vectorized_call); ++ class loop *sloop ++ = vect_loop_versioning (loop_vinfo, loop_vectorized_call); + sloop->force_vectorize = false; + check_profitability = false; + } +@@ -9992,8 +9989,7 @@ vect_transform_loop (loop_vec_info loop_vinfo, gimple *loop_vectorized_call) + niters_vector_mult_vf, !niters_no_overflow); + + unsigned int assumed_vf = vect_vf_for_cost (loop_vinfo); +- if (!(optimize >= 2 && flag_llc_allocate > 0)) +- scale_profile_for_vect_loop (loop, assumed_vf); ++ scale_profile_for_vect_loop (loop, assumed_vf); + + /* True if the final iteration might not handle a full vector's + worth of scalar iterations. */ +-- +2.44.0.windows.1 + diff --git a/gcc.spec b/gcc.spec index 04b5166..56af76a 100644 --- a/gcc.spec +++ b/gcc.spec @@ -2,7 +2,7 @@ %global gcc_major 12 # 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 78 +%global gcc_release 79 %global _unpackaged_files_terminate_build 0 %global _performance_build 1 @@ -467,6 +467,8 @@ Patch358: 0358-Avoid-doing-sfc-with-struct_split-and-compressing-de.patch Patch359: 0359-struct-reorg-disable-malloc-support-when-struct_layo.patch Patch360: 0360-struct-reorg-fix-residual-ssa_name-issue.patch Patch361: 0361-tracer-static-Fix-divide-by-zero-error.patch +Patch362: 0362-fix-prefetch-case-failed.patch +Patch363: 0363-llc-feature-bugfix.patch # Part 1001-1999 %ifarch sw_64 @@ -1614,6 +1616,8 @@ not stable, so plugins must be rebuilt any time GCC is updated. %patch -P359 -p1 %patch -P360 -p1 %patch -P361 -p1 +%patch -P362 -p1 +%patch -P363 -p1 %ifarch sw_64 %patch -P1001 -p1 @@ -4251,6 +4255,12 @@ end %doc rpm.doc/changelogs/libcc1/ChangeLog* %changelog +* Wed Mar 12 2025 chenhong - 12.3.1-79 +- Type:Bugfix +- ID:NA +- SUG:NA +- DESC:Fix llc feature failed case + * Mon Mar 10 2025 wumingchuan - 12.3.1-78 - Type:Bugfix - ID:NA -- Gitee