From: Andrew MacLeod Date: Mon, 26 Apr 2021 21:50:18 +0000 (-0400) Subject: Don't over-allocate switch default range object. X-Git-Tag: basepoints/gcc-13~7688 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4c07e591925bb02e71a499f1cf780ce63985dba0;p=thirdparty%2Fgcc.git Don't over-allocate switch default range object. We were always allocating the 255 max ranges for the default condition. Instead, use int_range_max to build the default range, then allocate and store only what is needed. * gimple-range-edge.cc (outgoing_range::calc_switch_ranges): Compute default range into a temp and allocate only what is needed. --- diff --git a/gcc/gimple-range-edge.cc b/gcc/gimple-range-edge.cc index d2c7d384dff2..4d4cb97bbec1 100644 --- a/gcc/gimple-range-edge.cc +++ b/gcc/gimple-range-edge.cc @@ -112,8 +112,7 @@ outgoing_range::calc_switch_ranges (gswitch *sw) // // Allocate an int_range_max for the default range case, start with // varying and intersect each other case from it. - irange *default_range = m_range_allocator.allocate (255); - default_range->set_varying (type); + int_range_max default_range (type); for (x = 1; x < lim; x++) { @@ -132,7 +131,7 @@ outgoing_range::calc_switch_ranges (gswitch *sw) int_range_max def_range (low, high); range_cast (def_range, type); def_range.invert (); - default_range->intersect (def_range); + default_range.intersect (def_range); // Create/union this case with anything on else on the edge. int_range_max case_range (low, high); @@ -156,7 +155,8 @@ outgoing_range::calc_switch_ranges (gswitch *sw) irange *&slot = m_edge_table->get_or_insert (default_edge, &existed); // This should be the first call into this switch. gcc_checking_assert (!existed); - slot = default_range; + irange *dr = m_range_allocator.allocate (default_range); + slot = dr; }