mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-15 01:40:36 +08:00
re PR tree-optimization/46726 (x*x has different cost than pow(x,2) with -ffast-math)
2010-12-07 Richard Guenther <rguenther@suse.de> PR tree-optimization/46726 * tree-inline.c (estimate_num_insns): Special case pow (x, 2.0). From-SVN: r167531
This commit is contained in:
parent
0b238a9b87
commit
e9f7ad799c
@ -1,3 +1,8 @@
|
||||
2010-12-07 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/46726
|
||||
* tree-inline.c (estimate_num_insns): Special case pow (x, 2.0).
|
||||
|
||||
2010-12-07 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-ssa-math-opts.c (execute_optimize_widening_mul): Unlink
|
||||
|
@ -3496,16 +3496,37 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
|
||||
/* Do not special case builtins where we see the body.
|
||||
This just confuse inliner. */
|
||||
if (!decl || cgraph_node (decl)->analyzed)
|
||||
cost = weights->call_cost;
|
||||
;
|
||||
/* For buitins that are likely expanded to nothing or
|
||||
inlined do not account operand costs. */
|
||||
else if (is_simple_builtin (decl))
|
||||
return 0;
|
||||
else if (is_inexpensive_builtin (decl))
|
||||
return weights->target_builtin_call_cost;
|
||||
else
|
||||
cost = weights->call_cost;
|
||||
else if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
|
||||
{
|
||||
/* We canonicalize x * x to pow (x, 2.0) with -ffast-math, so
|
||||
specialize the cheap expansion we do here.
|
||||
??? This asks for a more general solution. */
|
||||
switch (DECL_FUNCTION_CODE (decl))
|
||||
{
|
||||
case BUILT_IN_POW:
|
||||
case BUILT_IN_POWF:
|
||||
case BUILT_IN_POWL:
|
||||
if (TREE_CODE (gimple_call_arg (stmt, 1)) == REAL_CST
|
||||
&& REAL_VALUES_EQUAL
|
||||
(TREE_REAL_CST (gimple_call_arg (stmt, 1)), dconst2))
|
||||
return estimate_operator_cost (MULT_EXPR, weights,
|
||||
gimple_call_arg (stmt, 0),
|
||||
gimple_call_arg (stmt, 0));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cost = weights->call_cost;
|
||||
if (decl)
|
||||
funtype = TREE_TYPE (decl);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user