re PR tree-optimization/57027 (ICE in gimple_assign_rhs_code, at gimple.h:2022)
authorJoern Rennecke <joern.rennecke@embecosm.com>
Fri, 3 May 2013 11:18:37 +0000 (11:18 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Fri, 3 May 2013 11:18:37 +0000 (12:18 +0100)
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

gcc/ChangeLog
gcc/tree-ssa-math-opts.c

index ad545ae6aa5eca41706eb2ac62c9539d5ed8d5e7..5a3de458d05b13f1284a31a9ea038d1a3600c9b8 100644 (file)
@@ -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
index e7e09f6a9decb8a9e00e702df7551219d47395ee..a94172d01cdf22365559657c82bc69da6a5bd1d4 100644 (file)
@@ -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.  */