On Thu, 22 Jul 2021, Liu, Hongtao wrote: > > > >-----Original Message----- > >From: Uros Bizjak <ubiz...@gmail.com> > >Sent: Wednesday, July 21, 2021 4:23 PM > >To: Hongtao Liu <crazy...@gmail.com> > >Cc: Liu, Hongtao <hongtao....@intel.com>; gcc-patches@gcc.gnu.org; H. J. Lu > ><hjl.to...@gmail.com>; Richard Biener <rguent...@suse.de> > >Subject: Re: [PATCH] Support logic shift left/right for avx512 mask type. > > > >On Wed, Jul 21, 2021 at 5:05 AM Hongtao Liu <crazy...@gmail.com> wrote: > >> > >> On Tue, Jul 20, 2021 at 9:41 PM Uros Bizjak <ubiz...@gmail.com> wrote: > >> > > >> > On Tue, Jul 20, 2021 at 2:33 PM liuhongt <hongtao....@intel.com> wrote: > >> > > > >> > > Hi: > >> > > As mention in > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-July/575420.html > >> > > > >> > > ----cut start----- > >> > > > note for the lowpart we can just view-convert away the excess > >> > > > bits, fully re-using the mask. We generate surprisingly "good" code: > >> > > > > >> > > > kmovb %k1, %edi > >> > > > shrb $4, %dil > >> > > > kmovb %edi, %k2 > >> > > > > >> > > > besides the lack of using kshiftrb. I guess we're just lacking > >> > > > a mask register alternative for > >> > > Yes, we can do it similar as kor/kand/kxor. > >> > > ---cut end-------- > >> > > > >> > > Bootstrap and regtested on x86_64-linux-gnu{-m32,}. > >> > > Ok for trunk? > >> > > > >> > > gcc/ChangeLog: > >> > > > >> > > * config/i386/constraints.md (Wb): New constraint. > >> > > (Ww): Ditto. > >> > > * config/i386/i386.md (*ashlhi3_1): Extend to avx512 mask > >> > > shift. > >> > > (*ashlqi3_1): Ditto. > >> > > (*<insn><mode>3_1): Ditto. > >> > > (*<insn><mode>3_1): Ditto. > >> > > * config/i386/sse.md (k<code><mode>): New define_split after > >> > > it to convert generic shift pattern to mask shift ones. > >> > > > >> > > gcc/testsuite/ChangeLog: > >> > > > >> > > * gcc.target/i386/mask-shift.c: New test. > > > > > >+(define_insn "*lshr<mode>3_1" > >+ [(set (match_operand:SWI12 0 "nonimmediate_operand" "=<r>m, ?k") > >+ (lshiftrt:SWI12 > >+ (match_operand:SWI12 1 "nonimmediate_operand" "0, k") > >+ (match_operand:QI 2 "nonmemory_operand" "c<S>, <KS>"))) > >+ (clobber (reg:CC FLAGS_REG))] > >+ "ix86_binary_operator_ok (LSHIFTRT, <MODE>mode, operands)" > > > >Also split this one to QImode and HImode to avoid conditions in isa > >attribute. > > > >OK with this change. > > > > Thanks for the review, here's the patch I'm check in.
Works with my experimental patches, thanks! Richard.