On Wed, Aug 09, 2023 at 11:27:48AM -0700, Andrew Pinski wrote: > Maybe it is better to punt for VOPS after the call to > single_non_singleton_phi_for_edges since none of functions called > afterwards support VOPs. > That is something like: > diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc > index ff36bb0119b..d0b659042a7 100644 > --- a/gcc/tree-ssa-phiopt.cc > +++ b/gcc/tree-ssa-phiopt.cc > @@ -4165,6 +4165,10 @@ pass_phiopt::execute (function *) > arg0 = gimple_phi_arg_def (phi, e1->dest_idx); > arg1 = gimple_phi_arg_def (phi, e2->dest_idx); > > + /* Can't do anything with a VOP here. */ > + if (SSA_NAME_IS_VIRTUAL_OPERAND (arg0)) > + continue; > +
That would ICE if arg0 isn't SSA_NAME (e.g. is INTEGER_CST). I think more canonical test for virtual phis is if (virtual_operand_p (gimple_phi_result (phi))) Shall already single_non_singleton_phi_for_edges punt if there is a virtual phi with different arguments from the edges (or if there is a single virtual phi)? Jakub