re PR tree-optimization/55524 (If fnma exists but not fms, convert_mult_to_fma should prefer to former over the latter.)
gcc: 2013-04-10 Joern Rennecke <joern.rennecke@embecosm.com> PR tree-optimization/55524 * tree-ssa-math-opts.c (convert_mult_to_fma): Don't use an fms construct when we don't have an fms operation, but fnma, and it looks likely that we'll be able to use the latter. gcc/testsuite: 2013-04-10 Joern Rennecke <joern.rennecke@embecosm.com> PR tree-optimization/55524 * gcc.target/epiphany/fnma-1.c: New test. From-SVN: r197668
This commit is contained in:
parent
6957a6f6f9
commit
ee8a9b7b50
@ -1,3 +1,11 @@
|
||||
2013-04-10 Joern Rennecke <joern.rennecke@embecosm.com>
|
||||
|
||||
PR tree-optimization/55524
|
||||
* tree-ssa-math-opts.c
|
||||
(convert_mult_to_fma): Don't use an fms construct
|
||||
when we don't have an fms operation, but fnma, and it looks
|
||||
likely that we'll be able to use the latter.
|
||||
|
||||
2013-04-10 Zhouyi Zhou <yizhouzhou@ict.ac.cn>
|
||||
|
||||
* cif-code.def (OVERWRITABLE): Correct the comment for overwritable
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-04-10 Joern Rennecke <joern.rennecke@embecosm.com>
|
||||
|
||||
PR tree-optimization/55524
|
||||
* gcc.target/epiphany/fnma-1.c: New test.
|
||||
|
||||
2013-04-10 Zhouyi Zhou <yizhouzhou@ict.ac.cn>
|
||||
|
||||
* gcc.dg/tree-ssa/inline-11.c: New test
|
||||
|
9
gcc/testsuite/gcc.target/epiphany/fnma-1.c
Normal file
9
gcc/testsuite/gcc.target/epiphany/fnma-1.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-final { scan-assembler-times "fmsub\[ \ta-zA-Z0-9\]*," 1 } } */
|
||||
|
||||
float
|
||||
f (float ar, float ai, float br, float bi)
|
||||
{
|
||||
return ar * br - ai * bi;
|
||||
}
|
@ -2570,6 +2570,24 @@ convert_mult_to_fma (gimple mul_stmt, tree op1, tree op2)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* If the subtrahend (gimple_assign_rhs2 (use_stmt)) is computed
|
||||
by a MULT_EXPR that we'll visit later, we might be able to
|
||||
get a more profitable match with fnma.
|
||||
OTOH, if we don't, a negate / fma pair has likely lower latency
|
||||
that a mult / subtract pair. */
|
||||
if (use_code == MINUS_EXPR && !negate_p
|
||||
&& gimple_assign_rhs1 (use_stmt) == result
|
||||
&& optab_handler (fms_optab, TYPE_MODE (type)) == CODE_FOR_nothing
|
||||
&& optab_handler (fnma_optab, TYPE_MODE (type)) != CODE_FOR_nothing)
|
||||
{
|
||||
tree rhs2 = gimple_assign_rhs2 (use_stmt);
|
||||
gimple stmt2 = SSA_NAME_DEF_STMT (rhs2);
|
||||
|
||||
if (has_single_use (rhs2)
|
||||
&& gimple_assign_rhs_code (stmt2) == MULT_EXPR)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* We can't handle a * b + a * b. */
|
||||
if (gimple_assign_rhs1 (use_stmt) == gimple_assign_rhs2 (use_stmt))
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user