aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-math-opts.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-03-11 16:36:16 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-03-11 16:36:16 +0000
commita758fd670cbf0935c6fa6cac3336b184f5c3c92a (patch)
tree50e8dad10f8d14f7dbb32ac528ad778bf92feeed /gcc/tree-ssa-math-opts.c
parent03dfda54535c36cef955c0d06d46b82e2356574c (diff)
downloadgcc-a758fd670cbf0935c6fa6cac3336b184f5c3c92a.zip
gcc-a758fd670cbf0935c6fa6cac3336b184f5c3c92a.tar.gz
gcc-a758fd670cbf0935c6fa6cac3336b184f5c3c92a.tar.bz2
re PR tree-optimization/48067 (FMA with no add operand produced by convert_mul_to_fma)
2011-03-11 Richard Guenther <rguenther@suse.de> PR tree-optimization/48067 * tree-ssa-math-opts.c (convert_mult_to_fma): Verify the multiplication result will be only used once on the target stmt. * gcc.dg/pr48067.c: New testcase. From-SVN: r170877
Diffstat (limited to 'gcc/tree-ssa-math-opts.c')
-rw-r--r--gcc/tree-ssa-math-opts.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index ed9b7a9..6e2213c 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -1557,6 +1557,9 @@ convert_mult_to_fma (gimple mul_stmt, tree op1, tree op2)
/* A negate on the multiplication leads to FNMA. */
if (use_code == NEGATE_EXPR)
{
+ ssa_op_iter iter;
+ tree use;
+
result = gimple_assign_lhs (use_stmt);
/* Make sure the negate statement becomes dead with this
@@ -1565,6 +1568,11 @@ convert_mult_to_fma (gimple mul_stmt, tree op1, tree op2)
&use_p, &neguse_stmt))
return false;
+ /* Make sure the multiplication isn't also used on that stmt. */
+ FOR_EACH_SSA_TREE_OPERAND (use, neguse_stmt, iter, SSA_OP_USE)
+ if (use == mul_result)
+ return false;
+
/* Re-validate. */
use_stmt = neguse_stmt;
if (gimple_bb (use_stmt) != gimple_bb (mul_stmt))