Commit 880dcdae by Vladislav Ivanishin Committed by Vladislav Ivanishin

Make gsi_next_nonvirtual_phi do what one expects

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
parent ca95ce80
2019-10-07 Vladislav Ivanishin <vlad@ispras.ru> 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 * doc/invoke.texi (-Wuninitialized): Don't mention the clobbered by
setjmp situation here. Fix a verb's ending: "the exact variables or setjmp situation here. Fix a verb's ending: "the exact variables or
elements for which there are warnings depends" -> "... depend". elements for which there are warnings depends" -> "... depend".
......
...@@ -325,28 +325,31 @@ gsi_one_nondebug_before_end_p (gimple_stmt_iterator i) ...@@ -325,28 +325,31 @@ gsi_one_nondebug_before_end_p (gimple_stmt_iterator i)
return gsi_end_p (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 static inline void
gsi_next_nonvirtual_phi (gphi_iterator *i) gsi_next_nonvirtual_phi (gphi_iterator *i)
{ {
gphi *phi; do
if (gsi_end_p (*i))
return;
phi = i->phi ();
gcc_assert (phi != NULL);
while (virtual_operand_p (gimple_phi_result (phi)))
{ {
gsi_next (i); gsi_next (i);
}
while (!gsi_end_p (*i) && virtual_operand_p (gimple_phi_result (i->phi ())));
}
if (gsi_end_p (*i)) /* Return a new iterator pointing to the first non-virtual phi statement in
return; 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. */ /* Return the basic block associated with this iterator. */
......
...@@ -1688,13 +1688,10 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2) ...@@ -1688,13 +1688,10 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2)
gcc_assert (bb1 != NULL); gcc_assert (bb1 != NULL);
gcc_assert (bb2 != NULL); gcc_assert (bb2 != NULL);
si2 = gsi_start_phis (bb2); si2 = gsi_start_nonvirtual_phis (bb2);
for (si1 = gsi_start_phis (bb1); !gsi_end_p (si1); for (si1 = gsi_start_nonvirtual_phis (bb1); !gsi_end_p (si1);
gsi_next (&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)) if (gsi_end_p (si1) && gsi_end_p (si2))
break; break;
...@@ -1731,7 +1728,7 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2) ...@@ -1731,7 +1728,7 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2)
return return_false (); return return_false ();
} }
gsi_next (&si2); gsi_next_nonvirtual_phi (&si2);
} }
return true; return true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment