On Wed, Nov 29, 2023 at 10:35 AM Uros Bizjak <ubiz...@gmail.com> wrote:
>
> The compiler, configured with --enable-checking=yes,rtl,extra ICEs with:
>
> internal compiler error: RTL check: expected elt 0 type 'e' or 'u',
> have 'E' (rtx unspec) in try_combine, at combine.cc:3237
>
> This is
>
> 3236              /* Just replace the CC reg with a new mode.  */
> 3237              SUBST (XEXP (*cc_use_loc, 0), newpat_dest);
> 3238              undobuf.other_insn = cc_use_insn;
>
> in combine.cc, where *cc_use_loc is
>
> (unspec:DI [
>         (reg:CC 17 flags)
>     ] UNSPEC_PUSHFL)
>
> combine assumes CC must be used inside of a comparison and uses XEXP (..., 0)
> without checking on the RTX type of the argument.
>
> Skip the modification of CC-using operation if *cc_use_loc is not 
> COMPARISON_P.
>
>     PR middle-end/112560
>
> gcc/ChangeLog:
>
>     * combine.cc (try_combine): Skip the modification of CC-using
>     operation if *cc_use_loc is not COMPARISON_P.
>
> Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
>
> OK for master?

Don't we need to stop the attempt to combine when we cannot handle a use?
Simply not adjusting another use doesn't look correct, does it?

Richard.

>
> Uros.

Reply via email to