From 202d59415f19e3bb8a85abca3f79d952f8a4d54c Mon Sep 17 00:00:00 2001 From: Renlin Li Date: Mon, 10 Nov 2014 17:53:21 +0000 Subject: [PATCH] [PATCH] Partially fix PR61529, bound basic block frequency 2014-11-10 Renlin Li 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 | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr61529.c | 27 +++++++++++++++++++++++++++ gcc/tree-ssa-threadupdate.c | 5 +++++ 4 files changed, 42 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr61529.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b70b620869..f29986b6682 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-11-10 Renlin Li + + PR middle-end/61529 + * tree-ssa-threadupdate.c (compute_path_counts): Bound path_in_freq. + 2014-11-10 Thomas Preud'homme * expmed.c (expand_shift_1): Expand 8 bit rotate of 16 bit value to diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3af1a43c8f2..ece3d52259b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-11-10 Renlin Li + + PR middle-end/61529 + * gcc.dg/pr61529.c: New. + 2014-11-10 Bernd Schmidt * 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 index 00000000000..392239e7158 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr61529.c @@ -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; +} diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index 5d838c3c25f..151ed839547 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -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 -- 2.30.2