On Tue, 26 Apr 2022, Jakub Jelinek wrote:

> Hi!
> 
> As mentioned in the PR, we ICE because maybe_fold_*_comparisons returns
> an expression with V4SImode type and we try to fold_convert it to
> V4BImode, which isn't allowed.
> 
> IMHO no matter whether we change maybe_fold_*_comparisons we should
> play safe on the reassoc side and punt if we can't convert like
> we punt for many other reasons.  This fixes the testcase on ARM.
> 
> Bootstrapped/regtested on {x86_64,i686,armv7hl,aarch64,powerpc64le}-linux,
> ok for trunk?

OK.

Richard.

> Testcase not included, not exactly sure where and what directives it
> should have in gcc.target/arm/ testsuite.  Christophe, do you think you
> could handle that incrementally?
> 
> 2022-04-26  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/105374
>       * tree-ssa-reassoc.cc (eliminate_redundant_comparison): Punt if
>       !fold_convertible_p rather than assuming fold_convert must succeed.
> 
> --- gcc/tree-ssa-reassoc.cc.jj        2022-04-14 13:46:59.690140053 +0200
> +++ gcc/tree-ssa-reassoc.cc   2022-04-25 15:34:03.811473537 +0200
> @@ -2254,7 +2254,11 @@ eliminate_redundant_comparison (enum tre
>        BIT_AND_EXPR or BIT_IOR_EXPR was of a wider integer type,
>        we need to convert.  */
>        if (!useless_type_conversion_p (TREE_TYPE (curr->op), TREE_TYPE (t)))
> -     t = fold_convert (TREE_TYPE (curr->op), t);
> +     {
> +       if (!fold_convertible_p (TREE_TYPE (curr->op), t))
> +         continue;
> +       t = fold_convert (TREE_TYPE (curr->op), t);
> +     }
>  
>        if (TREE_CODE (t) != INTEGER_CST
>         && !operand_equal_p (t, curr->op, 0))
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Ivo Totev; HRB 36809 (AG Nuernberg)

Reply via email to