On Sat, Jun 3, 2023 at 7:31 PM Roger Sayle <ro...@nextmovesoftware.com> wrote:
>
>
> This patch fixes PR target/110083, an ICE-on-valid regression exposed by
> my recent PTEST improvements (to address PR target/109973).  The latent
> bug (admittedly mine) is that the scalar-to-vector (STV) pass doesn't update
> or delete REG_EQUAL notes attached to COMPARE instructions.  As a result
> the operands of COMPARE would be mismatched, with the register transformed
> to V1TImode, but the immediate operand left as const_wide_int, which is
> valid for TImode but not V1TImode.  This remained latent when the STV
> conversion converted the mode of the COMPARE to CCmode, with later passes
> recognizing the REG_EQUAL note is obviously invalid as the modes didn't
> match, but now that we (correctly) preserve the CCZmode on COMPARE, the
> mismatched operand modes trigger a sanity checking ICE downstream.
>
> Fixed by updating (or deleting) any REG_EQUAL notes in convert_compare.
>
> Before:
>     (expr_list:REG_EQUAL (compare:CCZ (reg:V1TI 119 [ ivin.29_38 ])
>         (const_wide_int 0x80000000000000000000000000000000))
>
> After:
>     (expr_list:REG_EQUAL (compare:CCZ (reg:V1TI 119 [ ivin.29_38 ])
>         (const_vector:V1TI [
>             (const_wide_int 0x80000000000000000000000000000000)
>          ]))
>
> This patch has been tested on x86_64-pc-linux-gnu with make bootstrap
> and make -k check, both with and without --target_board=unix{-m32}
> with no new failures.  Ok for mainline?
>
>
> 2023-06-03  Roger Sayle  <ro...@nextmovesoftware.com>
>
> gcc/ChangeLog
>         PR target/110083
>         * config/i386/i386-features.cc (scalar_chain::convert_compare):
>         Update or delete REG_EQUAL notes, converting CONST_INT and
>         CONST_WIDE_INT immediate operands to a suitable CONST_VECTOR.
>
> gcc/testsuite/ChangeLog
>         PR target/110083
>         * gcc.target/i386/pr110083.c: New test case.

OK.

Thanks,
Uros.

>
>
> Roger
> --
>

Reply via email to