Projects
Mega:23.03
gcc
_service:tar_scm:0033-AutoFdo-Fix-memory-leaks-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:0033-AutoFdo-Fix-memory-leaks-in-autofdo-and-autoprefetch.patch of Package gcc
From adfcca263996bf174f7108b477e81e7ec58f19c4 Mon Sep 17 00:00:00 2001 From: dingguangya <dingguangya1@huawei.com> Date: Mon, 14 Mar 2022 10:42:07 +0800 Subject: [PATCH] [AutoFdo] Fix memory leaks in autofdo and autoprefetch Fix memory leaks in autofdo and autoprefetch. --- gcc/final.c | 23 +++++++++++++++-------- gcc/tree-ssa-loop-prefetch.c | 4 ++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/gcc/final.c b/gcc/final.c index b9affd3a7..da8d20958 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -4770,12 +4770,16 @@ 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); @@ -4826,12 +4830,14 @@ 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))); + func_name); fprintf (asm_out_file, "\t.string \"" HOST_WIDE_INT_PRINT_DEC "\"\n", @@ -4841,9 +4847,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); } } } @@ -4917,8 +4923,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", @@ -4926,8 +4933,7 @@ dump_function_info_to_asm (const char *fnname) if (dump_file) { - fprintf (dump_file, "\n FUNC_NAME: %s\n", - alias_local_functions (fnname)); + fprintf (dump_file, "\n FUNC_NAME: %s\n", func_name); fprintf (dump_file, " file: %s\n", dump_base_name); fprintf (dump_file, " profile_status: %s\n", @@ -4937,6 +4943,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 info form AutoFDO or PGO to asm. */ diff --git a/gcc/tree-ssa-loop-prefetch.c b/gcc/tree-ssa-loop-prefetch.c index 0d992d8f6..781831c39 100644 --- a/gcc/tree-ssa-loop-prefetch.c +++ b/gcc/tree-ssa-loop-prefetch.c @@ -2248,6 +2248,7 @@ get_bb_branch_prob (hash_map <basic_block, bb_bp> &bb_branch_prob, branch_prob.true_edge_prob = get_edge_prob (e); } } + free (body); } /* Traverse each bb in the loop and prune fake loops. */ @@ -2416,6 +2417,7 @@ estimate_num_loop_insns (struct loop *loop, eni_weights *weights) if (get_bb_prob (bb_branch_prob, loop) == false) { dump_loop_bb (loop); + free (body); return 0; } if (dump_file && (dump_flags & TDF_DETAILS)) @@ -2596,6 +2598,7 @@ is_high_exec_rate_loop (struct loop *loop) if (loop_exec_rate < (float) LOOP_EXECUTION_RATE / 100.0) { + exit_edges.release (); return false; } } @@ -2606,6 +2609,7 @@ is_high_exec_rate_loop (struct loop *loop) loop_exec_rate, (float) LOOP_EXECUTION_RATE / 100.0); dump_loop_bb (loop); } + exit_edges.release (); return true; } -- 2.27.0.windows.1
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2