Make gsi_next_nonvirtual_phi do what one expects
authorVladislav Ivanishin <vlad@ispras.ru>
Mon, 7 Oct 2019 14:29:07 +0000 (14:29 +0000)
committerVladislav Ivanishin <vlad@gcc.gnu.org>
Mon, 7 Oct 2019 14:29:07 +0000 (14:29 +0000)
gcc/

        * gimple-iterator.h (gsi_next_nonvirtual_phi): Change the semantics to
        match that of other gsi_next_* functions.  Adjust the comment.
        (gsi_start_nonvirtual_phis): New function.
        * ipa-icf.c (sem_function::compare_phi_node): Update uses of
        gsi_next_nonvirtual_phi accordingly.  (No functional change.)

From-SVN: r276658

gcc/ChangeLog
gcc/gimple-iterator.h
gcc/ipa-icf.c

index 8ecb2a1..2702146 100644 (file)
@@ -1,5 +1,13 @@
 2019-10-07 Vladislav Ivanishin  <vlad@ispras.ru>
 
+       * gimple-iterator.h (gsi_next_nonvirtual_phi): Change the semantics to
+       match that of other gsi_next_* functions.  Adjust the comment.
+       (gsi_start_nonvirtual_phis): New function.
+       * ipa-icf.c (sem_function::compare_phi_node): Update uses of
+       gsi_next_nonvirtual_phi accordingly.  (No functional change.)
+
+2019-10-07 Vladislav Ivanishin  <vlad@ispras.ru>
+
        * doc/invoke.texi (-Wuninitialized): Don't mention the clobbered by
        setjmp situation here.  Fix a verb's ending: "the exact variables or
        elements for which there are warnings depends" -> "... depend".
index ee6f5b1..ccd93d9 100644 (file)
@@ -325,28 +325,31 @@ gsi_one_nondebug_before_end_p (gimple_stmt_iterator i)
   return gsi_end_p (i);
 }
 
-/* Iterates I statement iterator to the next non-virtual statement.  */
+/* Advance I statement iterator to the next non-virtual GIMPLE_PHI
+   statement.  */
 
 static inline void
 gsi_next_nonvirtual_phi (gphi_iterator *i)
 {
-  gphi *phi;
-
-  if (gsi_end_p (*i))
-    return;
-
-  phi = i->phi ();
-  gcc_assert (phi != NULL);
-
-  while (virtual_operand_p (gimple_phi_result (phi)))
+  do
     {
       gsi_next (i);
+    }
+  while (!gsi_end_p (*i) && virtual_operand_p (gimple_phi_result (i->phi ())));
+}
 
-      if (gsi_end_p (*i))
-       return;
+/* Return a new iterator pointing to the first non-virtual phi statement in
+   basic block BB.  */
 
-      phi = i->phi ();
-    }
+static inline gphi_iterator
+gsi_start_nonvirtual_phis (basic_block bb)
+{
+  gphi_iterator i = gsi_start_phis (bb);
+
+  if (!gsi_end_p (i) && virtual_operand_p (gimple_phi_result (i.phi ())))
+    gsi_next_nonvirtual_phi (&i);
+
+  return i;
 }
 
 /* Return the basic block associated with this iterator.  */
index 009aeb4..8bf0f7c 100644 (file)
@@ -1688,13 +1688,10 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2)
   gcc_assert (bb1 != NULL);
   gcc_assert (bb2 != NULL);
 
-  si2 = gsi_start_phis (bb2);
-  for (si1 = gsi_start_phis (bb1); !gsi_end_p (si1);
-       gsi_next (&si1))
+  si2 = gsi_start_nonvirtual_phis (bb2);
+  for (si1 = gsi_start_nonvirtual_phis (bb1); !gsi_end_p (si1);
+       gsi_next_nonvirtual_phi (&si1))
     {
-      gsi_next_nonvirtual_phi (&si1);
-      gsi_next_nonvirtual_phi (&si2);
-
       if (gsi_end_p (si1) && gsi_end_p (si2))
        break;
 
@@ -1731,7 +1728,7 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2)
            return return_false ();
        }
 
-      gsi_next (&si2);
+      gsi_next_nonvirtual_phi (&si2);
     }
 
   return true;