]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Emit a label for the split cold function part.
authorSriraman Tallam <tmsriram@google.com>
Tue, 19 Nov 2013 22:12:21 +0000 (22:12 +0000)
committerSriraman Tallam <tmsriram@gcc.gnu.org>
Tue, 19 Nov 2013 22:12:21 +0000 (22:12 +0000)
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

gcc/ChangeLog
gcc/final.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c [new file with mode: 0644]

index f06ccfbd8adca0720ca5f10f86eb3e2aad728fbd..9c79ee9e6784da6fdccabe3a87e1d74e8fb658d8 100644 (file)
@@ -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...
index f2adde969751114d545ff6fcf23db707adec78ce..2ab6a4df3e39325affea3abf32d637b706c8822e 100644 (file)
@@ -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:
index 7235aaf8a31b290688900e082f63749a06f28dbe..190b2c4deafed3d2c795d2a311f85fb4b381acb3 100644 (file)
@@ -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 (file)
index 0000000..9dc7566
--- /dev/null
@@ -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;
+}