aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoern Rennecke <joern.rennecke@embecosm.com>2013-05-03 11:18:37 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2013-05-03 12:18:37 +0100
commit95c03b3683344ffe73b8116412045ad955a9e2a0 (patch)
treeb157e4ed252520ea2964168abc343932e458e0bc
parent07bfc9ece12554016cf8c39b17301ab94df6f176 (diff)
downloadgcc-95c03b3683344ffe73b8116412045ad955a9e2a0.zip
gcc-95c03b3683344ffe73b8116412045ad955a9e2a0.tar.gz
gcc-95c03b3683344ffe73b8116412045ad955a9e2a0.tar.bz2
re PR tree-optimization/57027 (ICE in gimple_assign_rhs_code, at gimple.h:2022)
2013-05-03 Joern Rennecke <joern.rennecke@embecosm.com> PR tree-optimization/57027 * tree-ssa-math-opts.c (convert_mult_to_fma): When checking for fnms opportunity, check we got the prerequisite kind of tree / gimple before using accessor functions. From-SVN: r198577
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-ssa-math-opts.c12
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ad545ae..5a3de45 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-05-03 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ PR tree-optimization/57027
+ * tree-ssa-math-opts.c (convert_mult_to_fma): When checking
+ for fnms opportunity, check we got the prerequisite kind
+ of tree / gimple before using accessor functions.
+
2013-05-03 Richard Biener <rguenther@suse.de>
* double-int.h (lshift): New overload without precision
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index e7e09f6..a94172d 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -2581,11 +2581,15 @@ convert_mult_to_fma (gimple mul_stmt, tree op1, tree op2)
&& 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;
+ if (TREE_CODE (rhs2) == SSA_NAME)
+ {
+ gimple stmt2 = SSA_NAME_DEF_STMT (rhs2);
+ if (has_single_use (rhs2)
+ && is_gimple_assign (stmt2)
+ && gimple_assign_rhs_code (stmt2) == MULT_EXPR)
+ return false;
+ }
}
/* We can't handle a * b + a * b. */