On Wed, Jan 13, 2021 at 9:30 AM Martin Liška <mli...@suse.cz> wrote:
>
> On 1/12/21 4:14 PM, Richard Biener wrote:
> > ) On Tue, Jan 12, 2021 at 3:50 PM Martin Liška <mli...@suse.cz> wrote:
> >>
> >> Hello.
> >>
> >> As seen in the PR, we need to fix also virtual PHIs, otherwise
> >> TODO_cfg will skip edges for a missing PHI argument.
> >>
> >> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> >>
> >> Ready to be installed?
> >
> > OK - doesn't this mean you can remove the
> >
> >        mark_virtual_operands_for_renaming (fun);
> >
> > call and thus TODO_update_ssa?  Btw, the pass seems
> > to unconditionally schedule TODO_cleanup_cfg - it would
> > be nice to only do that (return TODO_cleanup_cfg from
> > pass_if_to_switch::execute) if it did any transform.
>
> Yes, application of all the suggesting works fine.
>
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?

OK.

Thanks,
Richard.

> Thanks,
> Martin
>
> >
> > Thanks,
> > Richard.
> >
> >> Thanks,
> >> Martin
> >>
> >> gcc/ChangeLog:
> >>
> >>          PR tree-optimization/98455
> >>          * gimple-if-to-switch.cc (condition_info::record_phi_mapping):
> >>          Record also virtual PHIs.
> >>
> >> gcc/testsuite/ChangeLog:
> >>
> >>          PR tree-optimization/98455
> >>          * gcc.dg/tree-ssa/pr98455.c: New test.
> >> ---
> >>    gcc/gimple-if-to-switch.cc              |  7 ++-----
> >>    gcc/testsuite/gcc.dg/tree-ssa/pr98455.c | 19 +++++++++++++++++++
> >>    2 files changed, 21 insertions(+), 5 deletions(-)
> >>    create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr98455.c
> >>
> >> diff --git a/gcc/gimple-if-to-switch.cc b/gcc/gimple-if-to-switch.cc
> >> index 560753d0311..96213d86c28 100644
> >> --- a/gcc/gimple-if-to-switch.cc
> >> +++ b/gcc/gimple-if-to-switch.cc
> >> @@ -91,11 +91,8 @@ condition_info::record_phi_mapping (edge e, mapping_vec 
> >> *vec)
> >>           gsi_next (&gsi))
> >>        {
> >>          gphi *phi = gsi.phi ();
> >> -      if (!virtual_operand_p (gimple_phi_result (phi)))
> >> -       {
> >> -         tree arg = PHI_ARG_DEF_FROM_EDGE (phi, e);
> >> -         vec->safe_push (std::make_pair (phi, arg));
> >> -       }
> >> +      tree arg = PHI_ARG_DEF_FROM_EDGE (phi, e);
> >> +      vec->safe_push (std::make_pair (phi, arg));
> >>        }
> >>    }
> >>
> >> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr98455.c 
> >> b/gcc/testsuite/gcc.dg/tree-ssa/pr98455.c
> >> new file mode 100644
> >> index 00000000000..24e249f6fcb
> >> --- /dev/null
> >> +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr98455.c
> >> @@ -0,0 +1,19 @@
> >> +/* PR tree-optimization/98455 */
> >> +/* { dg-do compile } */
> >> +/* { dg-options "-O1 -fno-tree-dce --param case-values-threshold=1" } */
> >> +
> >> +void
> >> +n4 (int io, int vb)
> >> +{
> >> +  double uc[2] = { 1.0, 2.0, };
> >> +
> >> +  if (io == 0)
> >> +    uc[0] = 0.0;
> >> +
> >> +  for (;;)
> >> +    if (io == 0)
> >> +      if (vb == 0)
> >> +        uc[0] = uc[1];
> >> +      else if (vb == 1)
> >> +        uc[1] = 0.0;
> >> +}
> >> --
> >> 2.29.2
> >>
>

Reply via email to