re PR tree-optimization/51091 (FAIL: gcc.dg/tree-ssa/stdarg-2.c scan-tree-dump stdarg)
authorJakub Jelinek <jakub@redhat.com>
Fri, 11 Nov 2011 19:57:23 +0000 (20:57 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 11 Nov 2011 19:57:23 +0000 (20:57 +0100)
PR tree-optimization/51091
* tree-stdarg.c (execute_optimize_stdarg): Ignore TREE_CLOBBER_P
rhs also in the va_list_simple_ptr case.

From-SVN: r181299

gcc/ChangeLog
gcc/tree-stdarg.c

index 60d97d15c8f97b2592bf84763388e19346ae8dc2..40c57d161cb5eea4fce5fdb272cb956c06f1fd2c 100644 (file)
@@ -1,5 +1,9 @@
 2011-11-11  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/51091
+       * tree-stdarg.c (execute_optimize_stdarg): Ignore TREE_CLOBBER_P
+       rhs also in the va_list_simple_ptr case.
+
        PR tree-optimization/51058
        * tree-vect-slp.c (vect_remove_slp_scalar_calls): New function.
        (vect_schedule_slp): Call it.
index ef898ee5bbdf2d29d5bb760150b75f2a14425735..9b7a126b1ef4bc8e2b2319d1b98d4777eb571f87 100644 (file)
@@ -1,5 +1,5 @@
 /* Pass computing data for optimizing stdarg functions.
-   Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010
+   Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
    Contributed by Jakub Jelinek <jakub@redhat.com>
 
@@ -847,8 +847,12 @@ execute_optimize_stdarg (void)
                  if (get_gimple_rhs_class (gimple_assign_rhs_code (stmt))
                      == GIMPLE_SINGLE_RHS)
                    {
+                     /* Check for ap ={v} {}.  */
+                     if (TREE_CLOBBER_P (rhs))
+                       continue;
+
                      /* Check for tem = ap.  */
-                     if (va_list_ptr_read (&si, rhs, lhs))
+                     else if (va_list_ptr_read (&si, rhs, lhs))
                        continue;
 
                      /* Check for the last insn in:
@@ -875,6 +879,7 @@ execute_optimize_stdarg (void)
                      /* Check for ap ={v} {}.  */
                      if (TREE_CLOBBER_P (rhs))
                        continue;
+
                      /* Check for ap[0].field = temp.  */
                      else if (va_list_counter_struct_op (&si, lhs, rhs, true))
                        continue;