diff options
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 79de3634d86..c6bbece3ace 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -1735,7 +1735,6 @@ estimate_function_body_sizes (struct cgraph_node *node) tree arg; int freq; tree funtype = TREE_TYPE (node->decl); - bitmap must_not_throw = must_not_throw_labels (); if (dump_file) { @@ -1748,35 +1747,20 @@ estimate_function_body_sizes (struct cgraph_node *node) freq = compute_call_stmt_bb_frequency (node->decl, bb); for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi)) { - int this_size = estimate_num_insns (gsi_stmt (bsi), &eni_size_weights); - int this_time = estimate_num_insns (gsi_stmt (bsi), &eni_time_weights); - - /* MUST_NOT_THROW is usually handled by runtime calling terminate and stopping - stacking unwinding. However when there is local cleanup that can resume - to MUST_NOT_THROW then we generate explicit handler containing - std::terminate () call. - - Because inlining of function can introduce new cleanup region, prior - inlining we keep std::terinate () calls for every MUST_NOT_THROW containing - function call. Wast majority of these will be eliminated after inlining - and crossjumping will inify possible duplicated calls. So ignore - the handlers for function body estimates. */ - if (gimple_code (gsi_stmt (bsi)) == GIMPLE_LABEL - && bitmap_bit_p (must_not_throw, - LABEL_DECL_UID (gimple_label_label (gsi_stmt (bsi))))) - { - if (dump_file) - fprintf (dump_file, " MUST_NOT_THROW landing pad. Ignoring whole BB.\n"); - } + gimple stmt = gsi_stmt (bsi); + int this_size = estimate_num_insns (stmt, &eni_size_weights); + int this_time = estimate_num_insns (stmt, &eni_time_weights); + if (dump_file) { - fprintf (dump_file, " freq:%6i size:%3i time:%3i ", freq, this_size, this_time); - print_gimple_stmt (dump_file, gsi_stmt (bsi), 0, 0); + fprintf (dump_file, " freq:%6i size:%3i time:%3i ", + freq, this_size, this_time); + print_gimple_stmt (dump_file, stmt, 0, 0); } this_time *= freq; time += this_time; size += this_size; - if (likely_eliminated_by_inlining_p (gsi_stmt (bsi))) + if (likely_eliminated_by_inlining_p (stmt)) { size_inlining_benefit += this_size; time_inlining_benefit += this_time; @@ -1825,7 +1809,6 @@ estimate_function_body_sizes (struct cgraph_node *node) } inline_summary (node)->time_inlining_benefit = time_inlining_benefit; inline_summary (node)->size_inlining_benefit = size_inlining_benefit; - BITMAP_FREE (must_not_throw); } /* Compute parameters of functions used by inliner. */ |