On Wed, 20 Nov 2024, Jakub Jelinek wrote:

> Hi!
> 
> When working on the PR117612 fix, I've noticed a pasto in
> tree-ssa-phiopt.cc (spaceship_replacement).
> The code is
>       if (absu_hwi (tree_to_shwi (arg2)) != 1)
>         return false;
>       if (e1->flags & EDGE_TRUE_VALUE)
>         {
>           if (tree_to_shwi (arg0) != 2
>               || absu_hwi (tree_to_shwi (arg1)) != 1
>               || wi::to_widest (arg1) == wi::to_widest (arg2))
>             return false;
>         }
>       else if (tree_to_shwi (arg1) != 2
>                || absu_hwi (tree_to_shwi (arg0)) != 1
>                || wi::to_widest (arg0) == wi::to_widest (arg1))
>         return false;
> where arg{0,1,2,3} are PHI args and wants to ensure that if e1 is a
> true edge, then arg0 is 2 and one of arg{1,2} is -1 and one is 1,
> otherwise arg1 is 2 and one of arg{0,2} is -1 and one is 1.
> But due to pasto in the latte case doesn't verify that arg0
> is different from arg2, it could be both -1 or both 1 and we wouldn't
> punt.  The wi::to_widest (arg0) == wi::to_widest (arg1) test
> is always false when we've made sure in the earlier conditions that
> arg1 is 2 and arg0 is -1 or 1, so never 2.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

> 2024-11-20  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/94589
>       PR tree-optimization/117612
>       * tree-ssa-phiopt.cc (spaceship_replacement): Fix up
>       a pasto in check when arg1 is 2.
> 
> --- gcc/tree-ssa-phiopt.cc.jj 2024-11-19 20:30:56.311541135 +0100
> +++ gcc/tree-ssa-phiopt.cc    2024-11-20 12:37:41.594315207 +0100
> @@ -2690,7 +2692,7 @@ spaceship_replacement (basic_block cond_
>       }
>        else if (tree_to_shwi (arg1) != 2
>              || absu_hwi (tree_to_shwi (arg0)) != 1
> -            || wi::to_widest (arg0) == wi::to_widest (arg1))
> +            || wi::to_widest (arg0) == wi::to_widest (arg2))
>       return false;
>        switch (cmp2)
>       {
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to