diff options
author | Martin Liska <mliska@suse.cz> | 2019-09-02 09:09:39 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-09-02 07:09:39 +0000 |
commit | 1acbaa7530d7ec1e38fe8f5f1c5313b0d12a4f97 (patch) | |
tree | fa7d92210c72bfdc809824d297f11c8b02974a7b | |
parent | ae0d3f6a593058ab9fd56a34f604852ea2dec79b (diff) |
Fix thinko in early bail out in tree-switch-conversion.
2019-09-02 Martin Liska <mliska@suse.cz>
* tree-switch-conversion.c (jump_table_cluster::find_jump_tables):
Bail out when we'll end up with the same number of clusters as
at the beginning.
(bit_test_cluster::find_bit_tests): Likewise for bit tests.
(jump_table_cluster::can_be_handled): Remove the guard
as it's already handled in ::is_enabled. Allocate output
after early bail out.
From-SVN: r275293
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/tree-switch-conversion.c | 18 |
2 files changed, 18 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a4f02dcf3e..990c895f69d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2019-09-02 Martin Liska <mliska@suse.cz> + * tree-switch-conversion.c (jump_table_cluster::find_jump_tables): + Bail out when we'll end up with the same number of clusters as + at the beginning. + (bit_test_cluster::find_bit_tests): Likewise for bit tests. + (jump_table_cluster::can_be_handled): Remove the guard + as it's already handled in ::is_enabled. Allocate output + after early bail out. + +2019-09-02 Martin Liska <mliska@suse.cz> + PR gcov-profile/91601 * gcov.c (path_contains_zero_cycle_arc): Rename to ... (path_contains_zero_or_negative_cycle_arc): ... this and handle diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c index e8692a7fffe..b7149039ae4 100644 --- a/gcc/tree-switch-conversion.c +++ b/gcc/tree-switch-conversion.c @@ -1214,14 +1214,14 @@ jump_table_cluster::find_jump_tables (vec<cluster *> &clusters) } /* No result. */ - if (min[l].m_count == INT_MAX) + if (min[l].m_count == l) return clusters.copy (); vec<cluster *> output; output.create (4); /* Find and build the clusters. */ - for (int end = l;;) + for (unsigned int end = l;;) { int start = min[end].m_start; @@ -1258,11 +1258,9 @@ jump_table_cluster::can_be_handled (const vec<cluster *> &clusters, make a sequence of conditional branches instead of a dispatch. The definition of "much bigger" depends on whether we are - optimizing for size or for speed. */ - if (!flag_jump_tables) - return false; + optimizing for size or for speed. - /* For algorithm correctness, jump table for a single case must return + For algorithm correctness, jump table for a single case must return true. We bail out in is_beneficial if it's called just for a single case. */ if (start == end) @@ -1312,9 +1310,6 @@ jump_table_cluster::is_beneficial (const vec<cluster *> &, vec<cluster *> bit_test_cluster::find_bit_tests (vec<cluster *> &clusters) { - vec<cluster *> output; - output.create (4); - unsigned l = clusters.length (); auto_vec<min_cluster_item> min; min.reserve (l + 1); @@ -1337,9 +1332,12 @@ bit_test_cluster::find_bit_tests (vec<cluster *> &clusters) } /* No result. */ - if (min[l].m_count == INT_MAX) + if (min[l].m_count == l) return clusters.copy (); + vec<cluster *> output; + output.create (4); + /* Find and build the clusters. */ for (unsigned end = l;;) { |