diff options
author | Caroline Tice <cmtice@google.com> | 2015-04-27 09:44:35 -0700 |
---|---|---|
committer | Caroline Tice <ctice@gcc.gnu.org> | 2015-04-27 09:44:35 -0700 |
commit | 16d710b164529c81929bcb8bb55eea1b758b070e (patch) | |
tree | df19ff6f9889f28dc41876292756363a07ed31ca | |
parent | 0a48088a0b7339e8f1d000aee282cfb7e394938d (diff) | |
download | gcc-16d710b164529c81929bcb8bb55eea1b758b070e.zip gcc-16d710b164529c81929bcb8bb55eea1b758b070e.tar.gz gcc-16d710b164529c81929bcb8bb55eea1b758b070e.tar.bz2 |
Give proper type and size to named cold partitions.
2015-04-27 Caroline Tice <cmtice@google.com>
* final.c (final_scan_insn): Output cold_function_nmae as function
type.
* varasm.c (cold_function_name): Make gloval.
(assemble_start_function): Re-set cold_function_name.
(assemble_end_function): Output cold partition size.
* varasm.h (cold_fun ction_name): Declare global.
2015-04-27 Caroline Tice <cmtice@google.com>
* gcc.dg/tree-prof/cold_partition_label.c (main): Check for cold
partition size.
From-SVN: r222473
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/final.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c | 2 | ||||
-rw-r--r-- | gcc/varasm.c | 12 | ||||
-rw-r--r-- | gcc/varasm.h | 7 |
6 files changed, 42 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e2c8dd..b36391e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-04-27 Caroline Tice <cmtice@google.com> + + * final.c (final_scan_insn): Output cold_function_nmae as function + type. + * varasm.c (cold_function_name): Make gloval. + (assemble_start_function): Re-set cold_function_name. + (assemble_end_function): Output cold partition size. + * varasm.h (cold_fun ction_name): Declare global. + 2015-04-27 Ilya Tocar <ilya.tocar@intel.com> * config/i386/i386.h (EXT_REX_SSE_REG_P): New. diff --git a/gcc/final.c b/gcc/final.c index 231cfe5..968e525 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -2233,10 +2233,16 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, suffixing "cold" to the original function's name. */ if (in_cold_section_p) { - tree cold_function_name + cold_function_name = clone_function_name (current_function_decl, "cold"); +#ifdef ASM_DECLARE_FUNCTION_NAME + ASM_DECLARE_FUNCTION_NAME (asm_out_file, + IDENTIFIER_POINTER (cold_function_name), + current_function_decl); +#else ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (cold_function_name)); +#endif } break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 98aee26..21e4174 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-27 Caroline Tice <cmtice@google.com> + + * gcc.dg/tree-prof/cold_partition_label.c (main): Check for cold + partition size. + 2015-04-27 Peter Bergner <bergner@vnet.ibm.com> PR target/64579 diff --git a/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c b/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c index a03aad7..643707f 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c +++ b/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c @@ -35,4 +35,6 @@ main (int argc, char *argv[]) return 0; } +/* { dg-final-use { scan-assembler "foo\[._\]+cold\[\._\]+0" } } */ +/* { dg-final-use { scan-assembler "size\[ \ta-zA-Z0-0\]+foo\[._\]+cold\[\._\]+0" } } */ /* { dg-final-use { cleanup-saved-temps } } */ diff --git a/gcc/varasm.c b/gcc/varasm.c index 1597de1..eab937f 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -187,6 +187,13 @@ section *in_section; at the cold section. */ bool in_cold_section_p; +/* The following global holds the "function name" for the code in the + cold section of a function, if hot/cold function splitting is enabled + and there was actually code that went into the cold section. A + pseudo function name is needed for the cold section of code for some + debugging tools that perform symbolization. */ +tree cold_function_name = NULL_TREE; + /* A linked list of all the unnamed sections. */ static GTY(()) section *unnamed_sections; @@ -1719,6 +1726,7 @@ assemble_start_function (tree decl, const char *fnname) ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LCOLDE", const_labelno); crtl->subsections.cold_section_end_label = ggc_strdup (tmp_label); const_labelno++; + cold_function_name = NULL_TREE; } else { @@ -1856,6 +1864,10 @@ assemble_end_function (tree decl, const char *fnname ATTRIBUTE_UNUSED) save_text_section = in_section; switch_to_section (unlikely_text_section ()); + if (cold_function_name != NULL_TREE) + ASM_DECLARE_FUNCTION_SIZE (asm_out_file, + IDENTIFIER_POINTER (cold_function_name), + decl); ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.cold_section_end_label); if (first_function_block_is_cold) switch_to_section (text_section); diff --git a/gcc/varasm.h b/gcc/varasm.h index d2dafb7..0d7d563 100644 --- a/gcc/varasm.h +++ b/gcc/varasm.h @@ -20,6 +20,13 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_VARASM_H #define GCC_VARASM_H +/* The following global holds the "function name" for the code in the + cold section of a function, if hot/cold function splitting is enabled + and there was actually code that went into the cold section. A + pseudo function name is needed for the cold section of code for some + debugging tools that perform symbolization. */ +extern tree cold_function_name; + extern tree tree_output_constant_def (tree); extern void make_decl_rtl (tree); extern rtx make_decl_rtl_for_debug (tree); |