diff options
author | Richard Guenther <rguenther@suse.de> | 2011-03-11 16:36:16 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-03-11 16:36:16 +0000 |
commit | a758fd670cbf0935c6fa6cac3336b184f5c3c92a (patch) | |
tree | 50e8dad10f8d14f7dbb32ac528ad778bf92feeed /gcc/tree-ssa-math-opts.c | |
parent | 03dfda54535c36cef955c0d06d46b82e2356574c (diff) | |
download | gcc-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.c | 8 |
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)) |