From e487f0b8ff8c5b1436c33bb5c2087b384b5b1329 Mon Sep 17 00:00:00 2001 From: wangding16 Date: Wed, 24 Apr 2024 12:42:05 +0800 Subject: [PATCH] [Sync] Sync patch from openeuler/gcc --- ...ifying-gimple-failed-when-reorg-leve.patch | 27 ++++++ ...-AutoFdo-Fix-memory-leaks-in-autofdo.patch | 90 +++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 0056-Fix-bug-that-verifying-gimple-failed-when-reorg-leve.patch create mode 100644 0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch diff --git a/0056-Fix-bug-that-verifying-gimple-failed-when-reorg-leve.patch b/0056-Fix-bug-that-verifying-gimple-failed-when-reorg-leve.patch new file mode 100644 index 0000000..4bcaca8 --- /dev/null +++ b/0056-Fix-bug-that-verifying-gimple-failed-when-reorg-leve.patch @@ -0,0 +1,27 @@ +From fa6f80044dcebd28506e871e6e5d25e2dfd7e105 Mon Sep 17 00:00:00 2001 +From: tiancheng-bao +Date: Fri, 12 Apr 2024 15:09:28 +0800 +Subject: [PATCH 01/32] Fix bug that verifying gimple failed when reorg-level > + 5 + +--- + gcc/ipa-struct-reorg/ipa-struct-reorg.cc | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/gcc/ipa-struct-reorg/ipa-struct-reorg.cc b/gcc/ipa-struct-reorg/ipa-struct-reorg.cc +index f03d1d875..e08577c0c 100644 +--- a/gcc/ipa-struct-reorg/ipa-struct-reorg.cc ++++ b/gcc/ipa-struct-reorg/ipa-struct-reorg.cc +@@ -7461,6 +7461,9 @@ ipa_struct_reorg::rewrite_assign (gassign *stmt, gimple_stmt_iterator *gsi) + continue; + tree lhs_expr = newlhs[i] ? newlhs[i] : lhs; + tree rhs_expr = newrhs[i] ? newrhs[i] : rhs; ++ if (!useless_type_conversion_p (TREE_TYPE (lhs_expr), ++ TREE_TYPE (rhs_expr))) ++ rhs_expr = gimplify_build1 (gsi, NOP_EXPR, TREE_TYPE (lhs_expr), rhs_expr); + gimple *newstmt = gimple_build_assign (lhs_expr, rhs_expr); + if (dump_file && (dump_flags & TDF_DETAILS)) + { +-- +2.28.0.windows.1 + diff --git a/0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch b/0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch new file mode 100644 index 0000000..4d80606 --- /dev/null +++ b/0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch @@ -0,0 +1,90 @@ +From 13e82fccba781b29e55a6e1934986514019b728d Mon Sep 17 00:00:00 2001 +From: zhenyu--zhao +Date: Sun, 24 Mar 2024 20:42:27 +0800 +Subject: [PATCH 02/32] [AutoFdo] Fix memory leaks in autofdo + +--- + gcc/final.cc | 22 ++++++++++++++-------- + 1 file changed, 14 insertions(+), 8 deletions(-) + +diff --git a/gcc/final.cc b/gcc/final.cc +index d4c4fa08f..af4e529bb 100644 +--- a/gcc/final.cc ++++ b/gcc/final.cc +@@ -4402,12 +4402,15 @@ get_fdo_count_quality (profile_count count) + return profile_quality[count.quality ()]; + } + +-static const char * ++/* If the function is not public, return the function_name/file_name for ++ disambiguation of local symbols since there could be identical function ++ names coming from identical file names. The caller needs to free memory. */ ++static char * + alias_local_functions (const char *fnname) + { + if (TREE_PUBLIC (cfun->decl)) + { +- return fnname; ++ return concat (fnname, NULL); + } + return concat (fnname, "/", lbasename (dump_base_name), NULL); + } +@@ -4457,12 +4460,13 @@ dump_direct_callee_info_to_asm (basic_block bb, gcov_type call_count) + + if (callee) + { ++ char *func_name = ++ alias_local_functions (get_fnname_from_decl (callee)); + fprintf (asm_out_file, "\t.string \"%x\"\n", + INSN_ADDRESSES (INSN_UID (insn))); + + fprintf (asm_out_file, "\t.string \"%s%s\"\n", +- ASM_FDO_CALLEE_FLAG, +- alias_local_functions (get_fnname_from_decl (callee))); ++ ASM_FDO_CALLEE_FLAG, func_name); + + fprintf (asm_out_file, + "\t.string \"" HOST_WIDE_INT_PRINT_DEC "\"\n", +@@ -4472,9 +4476,9 @@ dump_direct_callee_info_to_asm (basic_block bb, gcov_type call_count) + { + fprintf (dump_file, "call: %x --> %s \n", + INSN_ADDRESSES (INSN_UID (insn)), +- alias_local_functions +- (get_fnname_from_decl (callee))); ++ func_name); + } ++ free (func_name); + } + } + } +@@ -4547,8 +4551,9 @@ dump_bb_info_to_asm (basic_block bb, gcov_type bb_count) + static void + dump_function_info_to_asm (const char *fnname) + { ++ char *func_name = alias_local_functions (fnname); + fprintf (asm_out_file, "\t.string \"%s%s\"\n", +- ASM_FDO_CALLER_FLAG, alias_local_functions (fnname)); ++ ASM_FDO_CALLER_FLAG, func_name); + fprintf (asm_out_file, "\t.string \"%s%d\"\n", + ASM_FDO_CALLER_SIZE_FLAG, get_function_end_addr ()); + fprintf (asm_out_file, "\t.string \"%s%s\"\n", +@@ -4557,7 +4562,7 @@ dump_function_info_to_asm (const char *fnname) + if (dump_file) + { + fprintf (dump_file, "\n FUNC_NAME: %s\n", +- alias_local_functions (fnname)); ++ func_name); + fprintf (dump_file, " file: %s\n", + dump_base_name); + fprintf (dump_file, "profile_status: %s\n", +@@ -4567,6 +4572,7 @@ dump_function_info_to_asm (const char *fnname) + fprintf (dump_file, " function_bind: %s\n", + simple_get_function_bind ()); + } ++ free (func_name); + } + + /* Dump function profile into form AutoFDO or PGO to asm. */ +-- +2.28.0.windows.1 +