Define & use special macros to record the name & size of cold partitions.
Define & use special macros to record the name & size of cold partitions. (Fix PR 65929). gcc/ChangeLog PR 65929 * config/elfos.h (ASM_DECLARE_COLD_FUNCTION_NAME): New macro definition. (ASM_DECLARE_COLD_FUNCTION_SIZE): New macro definition. * doc/tm.texi.in (ASM_DECLARE_COLD_FUNCTION_NAME): Document new macro. (ASM_DECLARE_COLD_FUNCTION_SIZE): Document new macro. * final.c (final_scan_insn): Use ASM_DECLARE_COLD_FUNCTION_NAME instead of ASM_DECLARE_FUNCTION_NAME for cold partition name. * varasm.c (assemble_end_function): Use ASM_DECLARE_COLD_FUNCTION_SIZE instead of ASM_DECLARE_FUNCTION_SIZE for cold partition size. gcc/testsuite/ChangeLog: PR 65929 * gcc.dg/tree-prof/cold_partition_label.c: Only check for cold partition size on certain targets. From-SVN: r222643
This commit is contained in:
parent
ae9af49bd4
commit
11c3d0711a
7 changed files with 84 additions and 10 deletions
|
@ -1,3 +1,15 @@
|
|||
2015-04-30 Caroline Tice <cmtice@google.com>
|
||||
|
||||
PR 65929
|
||||
* config/elfos.h (ASM_DECLARE_COLD_FUNCTION_NAME): New macro definition.
|
||||
(ASM_DECLARE_COLD_FUNCTION_SIZE): New macro definition.
|
||||
* doc/tm.texi.in (ASM_DECLARE_COLD_FUNCTION_NAME): Document new macro.
|
||||
(ASM_DECLARE_COLD_FUNCTION_SIZE): Document new macro.
|
||||
* final.c (final_scan_insn): Use ASM_DECLARE_COLD_FUNCTION_NAME
|
||||
instead of ASM_DECLARE_FUNCTION_NAME for cold partition name.
|
||||
* varasm.c (assemble_end_function): Use ASM_DECLARE_COLD_FUNCTION_SIZE
|
||||
instead of ASM_DECLARE_FUNCTION_SIZE for cold partition size.
|
||||
|
||||
2015-04-30 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
* varasm.c (handle_cache_entry): Fix logic.
|
||||
|
|
|
@ -284,6 +284,22 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|||
while (0)
|
||||
#endif
|
||||
|
||||
/* Write the extra assembler code needed to declare the name of a
|
||||
cold function partition properly. Some svr4 assemblers need to also
|
||||
have something extra said about the function's return value. We
|
||||
allow for that here. */
|
||||
|
||||
#ifndef ASM_DECLARE_COLD_FUNCTION_NAME
|
||||
#define ASM_DECLARE_COLD_FUNCTION_NAME(FILE, NAME, DECL) \
|
||||
do \
|
||||
{ \
|
||||
ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \
|
||||
ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
|
||||
ASM_OUTPUT_FUNCTION_LABEL (FILE, NAME, DECL); \
|
||||
} \
|
||||
while (0)
|
||||
#endif
|
||||
|
||||
/* Write the extra assembler code needed to declare an object properly. */
|
||||
|
||||
#ifdef HAVE_GAS_GNU_UNIQUE_OBJECT
|
||||
|
@ -358,6 +374,17 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|||
while (0)
|
||||
#endif
|
||||
|
||||
/* This is how to declare the size of a cold function partition. */
|
||||
#ifndef ASM_DECLARE_COLD_FUNCTION_SIZE
|
||||
#define ASM_DECLARE_COLD_FUNCTION_SIZE(FILE, FNAME, DECL) \
|
||||
do \
|
||||
{ \
|
||||
if (!flag_inhibit_size_directive) \
|
||||
ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME); \
|
||||
} \
|
||||
while (0)
|
||||
#endif
|
||||
|
||||
/* A table of bytes codes used by the ASM_OUTPUT_ASCII and
|
||||
ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
|
||||
corresponds to a particular byte value [0..255]. For any
|
||||
|
|
|
@ -5574,6 +5574,34 @@ You may wish to use @code{ASM_OUTPUT_MEASURED_SIZE} in the definition
|
|||
of this macro.
|
||||
@end defmac
|
||||
|
||||
@defmac ASM_DECLARE_COLD_FUNCTION_NAME (@var{stream}, @var{name}, @var{decl})
|
||||
A C statement (sans semicolon) to output to the stdio stream
|
||||
@var{stream} any text necessary for declaring the name @var{name} of a
|
||||
cold function partition which is being defined. This macro is responsible
|
||||
for outputting the label definition (perhaps using
|
||||
@code{ASM_OUTPUT_FUNCTION_LABEL}). The argument @var{decl} is the
|
||||
@code{FUNCTION_DECL} tree node representing the function.
|
||||
|
||||
If this macro is not defined, then the cold partition name is defined in the
|
||||
usual manner as a label (by means of @code{ASM_OUTPUT_LABEL}).
|
||||
|
||||
You may wish to use @code{ASM_OUTPUT_TYPE_DIRECTIVE} in the definition
|
||||
of this macro.
|
||||
@end defmac
|
||||
|
||||
@defmac ASM_DECLARE_COLD_FUNCTION_SIZE (@var{stream}, @var{name}, @var{decl})
|
||||
A C statement (sans semicolon) to output to the stdio stream
|
||||
@var{stream} any text necessary for declaring the size of a cold function
|
||||
partition which is being defined. The argument @var{name} is the name of the
|
||||
cold partition of the function. The argument @var{decl} is the
|
||||
@code{FUNCTION_DECL} tree node representing the function.
|
||||
|
||||
If this macro is not defined, then the partition size is not defined.
|
||||
|
||||
You may wish to use @code{ASM_OUTPUT_MEASURED_SIZE} in the definition
|
||||
of this macro.
|
||||
@end defmac
|
||||
|
||||
@defmac ASM_DECLARE_OBJECT_NAME (@var{stream}, @var{name}, @var{decl})
|
||||
A C statement (sans semicolon) to output to the stdio stream
|
||||
@var{stream} any text necessary for declaring the name @var{name} of an
|
||||
|
|
|
@ -2235,10 +2235,11 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
|
|||
{
|
||||
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);
|
||||
#ifdef ASM_DECLARE_COLD_FUNCTION_NAME
|
||||
ASM_DECLARE_COLD_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));
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2015-04-30 Caroline Tice <cmtice@google.com>
|
||||
|
||||
PR 65929
|
||||
* gcc.dg/tree-prof/cold_partition_label.c: Only check for cold
|
||||
partition size on certain targets.
|
||||
|
||||
2015-04-30 Renlin Li <renlin.li@arm.com>
|
||||
|
||||
* gcc.target/aarch64/vect-reduc-or_1.c: New.
|
||||
|
|
|
@ -35,6 +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 { scan-assembler "foo\[._\]+cold\[\._\]+0" { target *-*-linux* *-*-gnu* } } } */
|
||||
/* { dg-final-use { scan-assembler "size\[ \ta-zA-Z0-0\]+foo\[._\]+cold\[\._\]+0" { target *-*-linux* *-*-gnu* } } } */
|
||||
/* { dg-final-use { cleanup-saved-temps } } */
|
||||
|
|
|
@ -1864,11 +1864,11 @@ assemble_end_function (tree decl, const char *fnname ATTRIBUTE_UNUSED)
|
|||
|
||||
save_text_section = in_section;
|
||||
switch_to_section (unlikely_text_section ());
|
||||
#ifdef ASM_DECLARE_FUNCTION_SIZE
|
||||
#ifdef ASM_DECLARE_COLD_FUNCTION_SIZE
|
||||
if (cold_function_name != NULL_TREE)
|
||||
ASM_DECLARE_FUNCTION_SIZE (asm_out_file,
|
||||
IDENTIFIER_POINTER (cold_function_name),
|
||||
decl);
|
||||
ASM_DECLARE_COLD_FUNCTION_SIZE (asm_out_file,
|
||||
IDENTIFIER_POINTER (cold_function_name),
|
||||
decl);
|
||||
#endif
|
||||
ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.cold_section_end_label);
|
||||
if (first_function_block_is_cold)
|
||||
|
|
Loading…
Add table
Reference in a new issue