aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSriraman Tallam <tmsriram@google.com>2013-11-19 22:12:21 +0000
committerSriraman Tallam <tmsriram@gcc.gnu.org>2013-11-19 22:12:21 +0000
commit2ae367c1e7081c2ec9a47267551d197002e79b23 (patch)
treec5c102bd1f2db820f1d57fb913fc67020e0bbb34
parent50875e80e1ed5ba34bf4342571530b7ad516af1b (diff)
downloadgcc-2ae367c1e7081c2ec9a47267551d197002e79b23.zip
gcc-2ae367c1e7081c2ec9a47267551d197002e79b23.tar.gz
gcc-2ae367c1e7081c2ec9a47267551d197002e79b23.tar.bz2
Emit a label for the split cold function part.
Emit a label for the split cold function part. Label name is formed by suffixing the original function name with "cold". Patch tested for bootstrap on all default languages on x86_64 and regression testsuite checked for parity with RUNTESTFLAGS -m32 and m64. From-SVN: r205057
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/final.c9
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c36
4 files changed, 55 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f06ccfb..9c79ee9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-19 Sriraman Tallam <tmsriram@google.com>
+
+ * final.c (final_scan_insn): Emit a label for the split
+ cold function part. Label name is formed by suffixing
+ the original function name with "cold".
+
2013-11-19 David Malcolm <dmalcolm@redhat.com>
* basic-block.h (ENTRY_BLOCK_PTR_FOR_FUNCTION): Rename macro to...
diff --git a/gcc/final.c b/gcc/final.c
index f2adde9..2ab6a4d 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -2168,6 +2168,15 @@ final_scan_insn (rtx insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
targetm.asm_out.function_switched_text_sections (asm_out_file,
current_function_decl,
in_cold_section_p);
+ /* Emit a label for the split cold section. Form label name by
+ suffixing "cold" to the original function's name. */
+ if (in_cold_section_p)
+ {
+ tree cold_function_name
+ = clone_function_name (current_function_decl, "cold");
+ ASM_OUTPUT_LABEL (asm_out_file,
+ IDENTIFIER_POINTER (cold_function_name));
+ }
break;
case NOTE_INSN_BASIC_BLOCK:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7235aaf..190b2c4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-19 Sriraman Tallam <tmsriram@google.com>
+
+ * gcc.dg/tree-prof/cold_partition_label.c: New testcase.
+
2013-11-19 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* gcc.target/powerpc/ppc64-abi-2.c (MAKE_SLOT): New macro to
diff --git a/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c b/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c
new file mode 100644
index 0000000..9dc7566
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c
@@ -0,0 +1,36 @@
+/* Test case to check if function foo gets split and the cold function
+ gets a label. */
+/* { dg-require-effective-target freorder } */
+/* { dg-options "-O2 -freorder-blocks-and-partition --save-temps" } */
+
+#define SIZE 10000
+
+const char *sarr[SIZE];
+const char *buf_hot;
+const char *buf_cold;
+
+__attribute__((noinline))
+void
+foo (int path)
+{
+ int i;
+ if (path)
+ {
+ for (i = 0; i < SIZE; i++)
+ sarr[i] = buf_hot;
+ }
+ else
+ {
+ for (i = 0; i < SIZE; i++)
+ sarr[i] = buf_cold;
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ buf_hot = "hello";
+ buf_cold = "world";
+ foo (argc);
+ return 0;
+}