tree-ssa-uninit.c (warn_uninitialized_vars): Don't warn about memory accesses where...
authorAndrew Pinski <apinski@cavium.com>
Tue, 25 Jul 2017 17:17:46 +0000 (17:17 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 25 Jul 2017 17:17:46 +0000 (10:17 -0700)
2017-07-25  Andrew Pinski  <apinski@cavium.com>

        * tree-ssa-uninit.c (warn_uninitialized_vars): Don't warn about memory
        accesses where the use is for the first operand of a BIT_INSERT.

From-SVN: r250530

gcc/ChangeLog
gcc/tree-ssa-uninit.c

index 1ddf5b5933996ef6464ba672637793334461b443..a5c563c43e6a818ffcbabbd056cea65c36fed7bd 100644 (file)
@@ -1,3 +1,8 @@
+2017-07-25  Andrew Pinski  <apinski@cavium.com>
+
+       * tree-ssa-uninit.c (warn_uninitialized_vars): Don't warn about memory
+       accesses where the use is for the first operand of a BIT_INSERT.
+
 2017-07-25  Jim Wilson  <jim.wilson@linaro.org>
 
        PR bootstrap/81521
index b587599f8f87acf70d21e6cbcfc445a88f5c5a29..67f0d840bf5caee369212894fb2465eb1a9eda50 100644 (file)
@@ -273,6 +273,11 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized)
              && gimple_has_location (stmt))
            {
              tree rhs = gimple_assign_rhs1 (stmt);
+             tree lhs = gimple_assign_lhs (stmt);
+             bool has_bit_insert = false;
+             use_operand_p luse_p;
+             imm_use_iterator liter;
+
              if (TREE_NO_WARNING (rhs))
                continue;
 
@@ -300,6 +305,26 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized)
                                               ref.offset) <= 0)))
                continue;
 
+             /* Do not warn if the access is then used for a BIT_INSERT_EXPR. */
+             if (TREE_CODE (lhs) == SSA_NAME)
+               FOR_EACH_IMM_USE_FAST (luse_p, liter, lhs)
+                 {
+                   gimple *use_stmt = USE_STMT (luse_p);
+                    /* BIT_INSERT_EXPR first operand should not be considered
+                      a use for the purpose of uninit warnings.  */
+                   if (gassign *ass = dyn_cast <gassign *> (use_stmt))
+                     {
+                       if (gimple_assign_rhs_code (ass) == BIT_INSERT_EXPR
+                           && luse_p->use == gimple_assign_rhs1_ptr (ass))
+                         {
+                           has_bit_insert = true;
+                           break;
+                         }
+                     }
+                 }
+             if (has_bit_insert)
+               continue;
+
              /* Limit the walking to a constant number of stmts after
                 we overcommit quadratic behavior for small functions
                 and O(n) behavior.  */