summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/cc
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1995-03-10 08:24:09 +0000
committerphk <phk@FreeBSD.org>1995-03-10 08:24:09 +0000
commitf41b04b4adcca9753b24561cdc22cc8bc4bcc5f9 (patch)
treed1469e2bff7fc921d6104ea6c2997dcc10af9797 /gnu/usr.bin/cc
parentd918180488f764caecc5afb2d10b8b262d230d41 (diff)
downloadFreeBSD-src-f41b04b4adcca9753b24561cdc22cc8bc4bcc5f9.zip
FreeBSD-src-f41b04b4adcca9753b24561cdc22cc8bc4bcc5f9.tar.gz
Since we are in the gcc bashing mood anyway: Add two changes for
basic-block profiling: 1. use a .stabs(25) symbol to link all the data structures together with. The regular method isn't safe for the kernel. 2. add a BB before the prologue and add a BB after the epilogue, this alows us to find the length of any counted BB. This is a cheap and somewhat reasonable measure of actual cost.
Diffstat (limited to 'gnu/usr.bin/cc')
-rw-r--r--gnu/usr.bin/cc/cc_int/final.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gnu/usr.bin/cc/cc_int/final.c b/gnu/usr.bin/cc/cc_int/final.c
index b1f4e87..157510a 100644
--- a/gnu/usr.bin/cc/cc_int/final.c
+++ b/gnu/usr.bin/cc/cc_int/final.c
@@ -333,6 +333,8 @@ end_final (filename)
ASM_OUTPUT_ALIGN (asm_out_file, align);
+ fprintf(asm_out_file,".stabs \"bbset\", 25, 0, 0, LPBX0\n");
+
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 0);
/* zero word */
assemble_integer (const0_rtx, UNITS_PER_WORD, 1);
@@ -902,6 +904,8 @@ final_start_function (first, file, optimize)
/* The Sun386i and perhaps other machines don't work right
if the profiling code comes after the prologue. */
+ if (profile_block_flag)
+ add_bb (file);
#ifdef PROFILE_BEFORE_PROLOGUE
if (profile_flag)
profile_function (file);
@@ -1055,6 +1059,9 @@ final_end_function (first, file, optimize)
code to restore the stack frame and return to the caller. */
FUNCTION_EPILOGUE (file, get_frame_size ());
#endif
+ if (profile_block_flag)
+ add_bb (file);
+
#ifdef SDB_DEBUGGING_INFO
if (write_symbols == SDB_DEBUG)
OpenPOWER on IntegriCloud