Commit c5d0600d by Jan Hubicka Committed by Jan Hubicka

re PR tree-optimization/46228 (code produced for STL container is worse in 4.5.1 than in 4.4.5)

	PR tree-optimize/46228
	* doc/invoke.texi (comdat-sharing-probability): Document.
	* ipa-inline.c (cgraph_estimate_growth): Handle COMDATs
	* params.def (PARAM_COMDAT_SHARING_PROBABILITY): New param.
	* g++.dg/tree-ssa/pr46228.C: New testcase.

From-SVN: r166555
parent d707fc77
...@@ -8343,6 +8343,11 @@ Limit of iterations of early inliner. This basically bounds number of nested ...@@ -8343,6 +8343,11 @@ Limit of iterations of early inliner. This basically bounds number of nested
indirect calls early inliner can resolve. Deeper chains are still handled by indirect calls early inliner can resolve. Deeper chains are still handled by
late inlining. late inlining.
@item comdat-sharing-probability
@itemx comdat-sharing-probability
Probability (in percent) that C++ inline function with comdat visibility
will be shared acroess multiple compilation units. The default value is 20.
@item min-vect-loop-bound @item min-vect-loop-bound
The minimum number of iterations under which a loop will not get vectorized The minimum number of iterations under which a loop will not get vectorized
when @option{-ftree-vectorize} is used. The number of iterations after when @option{-ftree-vectorize} is used. The number of iterations after
......
...@@ -404,6 +404,12 @@ cgraph_estimate_growth (struct cgraph_node *node) ...@@ -404,6 +404,12 @@ cgraph_estimate_growth (struct cgraph_node *node)
if (cgraph_will_be_removed_from_program_if_no_direct_calls (node) if (cgraph_will_be_removed_from_program_if_no_direct_calls (node)
&& !DECL_EXTERNAL (node->decl) && !self_recursive) && !DECL_EXTERNAL (node->decl) && !self_recursive)
growth -= node->global.size; growth -= node->global.size;
/* COMDAT functions are very often not shared across multiple units since they
come from various template instantiations. Take this into account. */
else if (DECL_COMDAT (node->decl) && !self_recursive
&& cgraph_can_remove_if_no_direct_calls_p (node))
growth -= (node->global.size
* (100 - PARAM_VALUE (PARAM_COMDAT_SHARING_PROBABILITY)) + 50) / 100;
node->global.estimated_growth = growth; node->global.estimated_growth = growth;
return growth; return growth;
......
...@@ -118,6 +118,12 @@ DEFPARAM (PARAM_EARLY_INLINER_MAX_ITERATIONS, ...@@ -118,6 +118,12 @@ DEFPARAM (PARAM_EARLY_INLINER_MAX_ITERATIONS,
10, 0, 0) 10, 0, 0)
/* Limit on probability of entry BB. */ /* Limit on probability of entry BB. */
DEFPARAM (PARAM_COMDAT_SHARING_PROBABILITY,
"comdat-sharing-probability",
"Probability that COMDAT function will be shared with different compilatoin unit",
20, 0, 0)
/* Limit on probability of entry BB. */
DEFPARAM (PARAM_PARTIAL_INLINING_ENTRY_PROBABILITY, DEFPARAM (PARAM_PARTIAL_INLINING_ENTRY_PROBABILITY,
"partial-inlining-entry-probability", "partial-inlining-entry-probability",
"Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen", "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen",
......
2010-11-10 Jan Hubicka <jh@suse.cz>
PR tree-optimize/46228
* g++.dg/tree-ssa/pr46228.C: New testcase.
2010-11-10 H.J. Lu <hongjiu.lu@intel.com> 2010-11-10 H.J. Lu <hongjiu.lu@intel.com>
PR tree-optimization/46414 PR tree-optimization/46414
......
// { dg-options "-fdump-tree-optimized -Os" }
#include <set>
#include <stdio.h>
int main()
{
static const int array[] = { 1,2,3,4,5,6,7,8,9,10,6 };
std::set<int> the_set;
int count = 0;
for (unsigned i = 0; i < sizeof(array)/sizeof(*array); i++)
{
std::pair<std::set<int>::iterator, bool> result =
the_set.insert(array[i]);
if (result.second)
count++;
}
printf("%d unique items in array.\n", count);
return 0;
}
// This function is small enough to be inlined even at -Os.
// { dg-final { scan-tree-dump-not "_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEED2Ev" "optimized" } }
// { dg-final { cleanup-tree-dump "optimized" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment