This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] tail_merge_optimize frequency fix


Richard,

this patch fixes up the basic block frequencies after merging 2 bbs in
tail_merge_optimize, and prevents tree-dump messages like:
'Invalid sum of incoming frequencies x, should be y'.

Bootstrapped and reg-tested on x86_64 and i686, build and reg-tested on ARM and
MIPS.

OK for trunk?

Thanks,
- Tom

2011-11-15  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-tail-merge.c (replace_block_by): Add frequency of bb2 to bb1.

	* gcc.dg/pr43864.c: Check for absence of 'Invalid sum' in pre tree-dump.
	* gcc.dg/pr43864-2.c: Same.
	* gcc.dg/pr43864-3.c: Same.
	* gcc.dg/pr43864-4.c: Same.
Index: gcc/tree-ssa-tail-merge.c
===================================================================
--- gcc/tree-ssa-tail-merge.c (revision 181377)
+++ gcc/tree-ssa-tail-merge.c (working copy)
@@ -1396,6 +1396,9 @@ replace_block_by (basic_block bb1, basic
 		   pred_edge, UNKNOWN_LOCATION);
     }
 
+  bb2->frequency += bb1->frequency;
+  bb1->frequency = 0;
+
   /* Do updates that use bb1, before deleting bb1.  */
   release_last_vdef (bb1);
   same_succ_flush_bb (bb1);
Index: gcc/testsuite/gcc.dg/pr43864-2.c
===================================================================
--- gcc/testsuite/gcc.dg/pr43864-2.c (revision 181377)
+++ gcc/testsuite/gcc.dg/pr43864-2.c (working copy)
@@ -19,4 +19,5 @@ f (int c, int b, int d)
 
 /* { dg-final { scan-tree-dump-times "if " 0 "pre"} } */
 /* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre"} } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
 /* { dg-final { cleanup-tree-dump "pre" } } */
Index: gcc/testsuite/gcc.dg/pr43864-3.c
===================================================================
--- gcc/testsuite/gcc.dg/pr43864-3.c (revision 181377)
+++ gcc/testsuite/gcc.dg/pr43864-3.c (working copy)
@@ -20,4 +20,5 @@ int f(int c, int b, int d)
 
 /* { dg-final { scan-tree-dump-times "if " 0 "pre"} } */
 /* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre"} } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
 /* { dg-final { cleanup-tree-dump "pre" } } */
Index: gcc/testsuite/gcc.dg/pr43864-4.c
===================================================================
--- gcc/testsuite/gcc.dg/pr43864-4.c (revision 181377)
+++ gcc/testsuite/gcc.dg/pr43864-4.c (working copy)
@@ -25,4 +25,5 @@ int f(int c, int b, int d)
 /* { dg-final { scan-tree-dump-times "if " 0 "pre"} } */
 /* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre"} } */
 /* { dg-final { scan-tree-dump-times " - " 2 "pre"} } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
 /* { dg-final { cleanup-tree-dump "pre" } } */
Index: gcc/testsuite/gcc.dg/pr43864.c
===================================================================
--- gcc/testsuite/gcc.dg/pr43864.c (revision 181377)
+++ gcc/testsuite/gcc.dg/pr43864.c (working copy)
@@ -32,4 +32,5 @@ hprofStartupp (char *outputFileName, cha
 }
 
 /* { dg-final { scan-tree-dump-times "myfree \\(" 1 "pre"} } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
 /* { dg-final { cleanup-tree-dump "pre" } } */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]