diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2021-09-29 17:25:50 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2021-10-06 09:18:09 -0400 |
commit | 3ca950c3525527846f13e8c547368ef432547a23 (patch) | |
tree | 84156fb071b8bf136365d9ddfce681ef78a181b3 /gcc/gimple-range-edge.h | |
parent | e828f4b5898896240b2ae5d5030c539aff28ea24 (diff) | |
download | gcc-3ca950c3525527846f13e8c547368ef432547a23.zip gcc-3ca950c3525527846f13e8c547368ef432547a23.tar.gz gcc-3ca950c3525527846f13e8c547368ef432547a23.tar.bz2 |
Introduce a param-switch-limit for EVRP.
Very large switches cause a lot of range calculations with multiple subranges
to happen. This can cause quadratic or even exponetial time increases in
large testcases. This patch introduces a param variable to limit
the size of switches EVRP will process.
* gimple-range-edge.cc (gimple_outgoing_range::gimple_outgoing_range):
Add parameter to limit size when recognizing switches.
(gimple_outgoing_range::edge_range_p): Check size limit.
* gimple-range-edge.h (gimple_outgoing_range): Add size field.
* gimple-range-gori.cc (gori_map::calculate_gori): Ignore switches
that exceed the size limit.
(gori_compute::gori_compute): Add initializer.
* params.opt (evrp-switch-limit): New.
* doc/invoke.texi: Update docs.
Diffstat (limited to 'gcc/gimple-range-edge.h')
-rw-r--r-- | gcc/gimple-range-edge.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/gimple-range-edge.h b/gcc/gimple-range-edge.h index 87b4124..03e8e82 100644 --- a/gcc/gimple-range-edge.h +++ b/gcc/gimple-range-edge.h @@ -38,13 +38,14 @@ along with GCC; see the file COPYING3. If not see class gimple_outgoing_range { public: - gimple_outgoing_range (); + gimple_outgoing_range (int max_sw_edges = INT_MAX); ~gimple_outgoing_range (); gimple *edge_range_p (irange &r, edge e); private: void calc_switch_ranges (gswitch *sw); bool get_edge_range (irange &r, gimple *s, edge e); + int m_max_edges; hash_map<edge, irange *> *m_edge_table; irange_allocator m_range_allocator; }; |