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 > -- >