]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gimple-fold.c (get_maxval_strlen): Move COND_EXPR handling under GIMPLE_ASSIGN.
authorAndrew Pinski <apinski@cavium.com>
Wed, 16 May 2012 20:22:03 +0000 (20:22 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Wed, 16 May 2012 20:22:03 +0000 (13:22 -0700)
2012-05-16  Andrew Pinski  <apinski@cavium.com>

* gimple-fold.c (get_maxval_strlen): Move COND_EXPR handling under
GIMPLE_ASSIGN.

From-SVN: r187608

gcc/ChangeLog
gcc/gimple-fold.c

index 6715f30cb7a19b22400c16f939506688da549a2a..b05a5b573d7ee535b0275b64cbcb46e0431a7bf8 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-16  Andrew Pinski  <apinski@cavium.com>
+
+       * gimple-fold.c (get_maxval_strlen): Move COND_EXPR handling under
+       GIMPLE_ASSIGN.
+
 2012-05-16  David S. Miller  <davem@davemloft.net>
 
        * jump.c (delete_related_insns): If we remove a CALL, make sure
index ee8b4d14d7c212802e009492df88fbf08deca343..b6f01430bb1c93e29b7c9567791cbbbe1d17e008 100644 (file)
@@ -670,13 +670,10 @@ get_maxval_strlen (tree arg, tree *length, bitmap visited, int type)
 
   if (TREE_CODE (arg) != SSA_NAME)
     {
-      if (TREE_CODE (arg) == COND_EXPR)
-        return get_maxval_strlen (COND_EXPR_THEN (arg), length, visited, type)
-               && get_maxval_strlen (COND_EXPR_ELSE (arg), length, visited, type);
       /* We can end up with &(*iftmp_1)[0] here as well, so handle it.  */
-      else if (TREE_CODE (arg) == ADDR_EXPR
-              && TREE_CODE (TREE_OPERAND (arg, 0)) == ARRAY_REF
-              && integer_zerop (TREE_OPERAND (TREE_OPERAND (arg, 0), 1)))
+      if (TREE_CODE (arg) == ADDR_EXPR
+         && TREE_CODE (TREE_OPERAND (arg, 0)) == ARRAY_REF
+         && integer_zerop (TREE_OPERAND (TREE_OPERAND (arg, 0), 1)))
        {
          tree aop0 = TREE_OPERAND (TREE_OPERAND (arg, 0), 0);
          if (TREE_CODE (aop0) == INDIRECT_REF
@@ -736,6 +733,13 @@ get_maxval_strlen (tree arg, tree *length, bitmap visited, int type)
             tree rhs = gimple_assign_rhs1 (def_stmt);
             return get_maxval_strlen (rhs, length, visited, type);
           }
+       else if (gimple_assign_rhs_code (def_stmt) == COND_EXPR)
+         {
+           tree op2 = gimple_assign_rhs2 (def_stmt);
+           tree op3 = gimple_assign_rhs3 (def_stmt);
+           return get_maxval_strlen (op2, length, visited, type)
+                  && get_maxval_strlen (op3, length, visited, type);
+          }
         return false;
 
       case GIMPLE_PHI: