On Sat, Jul 16, 2022 at 9:10 PM Roger Sayle <ro...@nextmovesoftware.com> wrote: > > > This patch resolves PR target/106231 by providing insns that recognize > (zero_extend:DI (ctz:SI ...)) and (sign_extend:DI (ctz:SI ...)). The > result of ctz:SI is always between 0 and 32 (or undefined), so > sign_extension is the same as zero_extension, and the result is already > extended in the destination register. > > Things are a little complicated, because the existing implementation > of *ctzsi2 handles multiple cases, including false dependencies, which > we continue to support in this patch. > > This patch has been tested on x86_64-pc-linux-gnu with make bootstrap > and make -k check with no new failures. Ok for mainline? > > 2022-07-16 Roger Sayle <ro...@nextmovesoftware.com> > > gcc/ChangeLog > PR target/106231 > * config/i386/i386.md (*ctzsidi2_<s>ext): New insn_and_split > to recognize any_extend:DI of ctz:SI which is implicitly extended. > (*ctzsidi2_<s>ext_falsedep): New define_insn to model a DImode > extended ctz:SI that has preceding xor to break false dependency. > > gcc/testsuite/ChangeLog > PR target/106231 > * gcc.target/i386/pr106231-1.c: New test case. > * gcc.target/i386/pr106231-2.c: New test case.
OK. Thanks, Uros. > > Thanks in advance, > Roger > -- >