[PATCH] if-to-switch: fix also virtual phis

Richard Biener richard.guenther@gmail.com
Tue Jan 12 15:14:11 GMT 2021


) On Tue, Jan 12, 2021 at 3:50 PM Martin Liška <mliska@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.

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
>


More information about the Gcc-patches mailing list