[PATCH] Partially fix PR61529, bound basic block frequency
authorRenlin Li <renlin.li@arm.com>
Mon, 10 Nov 2014 17:53:21 +0000 (17:53 +0000)
committerJiong Wang <jiwang@gcc.gnu.org>
Mon, 10 Nov 2014 17:53:21 +0000 (17:53 +0000)
  2014-11-10  Renlin Li <Renlin.Li@arm.com>

  PR middle-end/61529

  gcc/
    * tree-ssa-threadupdate.c (compute_path_counts): Bound path_in_freq.

  gcc/testsuite/
    * gcc.dg/pr61529.c: New.

From-SVN: r217303

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr61529.c [new file with mode: 0644]
gcc/tree-ssa-threadupdate.c

index 4b70b6208691545d9970a3faad630f9b6cda02d2..f29986b66825e7310f9644a935e579296ca8f23d 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-10  Renlin Li  <renlin.li@arm.com>
+
+       PR middle-end/61529
+       * tree-ssa-threadupdate.c (compute_path_counts): Bound path_in_freq.
+
 2014-11-10  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        * expmed.c (expand_shift_1): Expand 8 bit rotate of 16 bit value to
index 3af1a43c8f2e1211854c41c3f54300f307689048..ece3d52259b294b603b83e2243f17e8e9453cc1b 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-10  Renlin Li  <renlin.li@arm.com>
+
+       PR middle-end/61529
+       * gcc.dg/pr61529.c: New.
+
 2014-11-10  Bernd Schmidt  <bernds@codesourcery.com>
 
        * lib/target-supports.exp (check_effective_target_return_address):
diff --git a/gcc/testsuite/gcc.dg/pr61529.c b/gcc/testsuite/gcc.dg/pr61529.c
new file mode 100644 (file)
index 0000000..392239e
--- /dev/null
@@ -0,0 +1,27 @@
+/* PR middle-end/61529 */
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+unsigned int a = 0, b = 0;
+unsigned int c;
+
+int
+main ()
+{
+  unsigned int d = 0;
+  int e[5];
+
+  for (; b < 1; b++)
+    d = 0;
+  for (; d < 1; d++)
+    a = 0;
+  for (; a < 1; a++)
+    ;
+
+  for (c = 0; c < 5; c++)
+    e[c] = 1;
+  if (e[0])
+    c = 0;
+
+  return 0;
+}
index 5d838c3c25fce8121a87205bd81add13d9e2cd9d..151ed8395472aa0cc1ffb0b9a35f509e778dba2d 100644 (file)
@@ -734,6 +734,11 @@ compute_path_counts (struct redirection_data *rd,
             nonpath_count += ein->count;
         }
     }
+
+  /* This is needed due to insane incoming frequencies.  */
+  if (path_in_freq > BB_FREQ_MAX)
+    path_in_freq = BB_FREQ_MAX;
+
   BITMAP_FREE (in_edge_srcs);
 
   /* Now compute the fraction of the total count coming into the first