On Wed, Mar 23, 2016 at 02:28:03PM +0300, Kirill Yukhin wrote: > Hello, > > `vpcmpeqd' insn is only available in AVX2, however > [1] added check for AVX instead. Looks like a typo. > > Patch in the bottom fixes that. > > Bootstrapped, regtest still run. > Is it ok for main trunk if pass?
?? I see VEX.NDS.128.66.0F.WIG 76 /r RVM V/V AVX Compare packed doublewords in xmm3/m128 and VPCMPEQD xmm1, xmm2, xmm3/m128 xmm2 for equality. and VEX.NDS.256.66.0F.WIG 76 /r RVM V/V AVX2 Compare packed doublewords in ymm3/m256 and VPCMPEQD ymm1, ymm2, ymm3 /m256 ymm2 for equality. in the ISA pdfs. This code is only executed if standard_sse_constant_p returns 2, which is for 16-byte vectors and all ones for TARGET_SSE2, and for 32-byte vectors for TARGET_AVX2. Thus, IMNSHO the patch is wrong, even for plain -mavx -mno-avx2 we want to emit vpcmpeqd %xmm?, %xmm?, %xmm?, so that we don't mix VEX with non-VEX encoded insns. > gcc/ > * config/i386/i386.c (standard_sse_constant_opcode): Emit > vpcmpeqd if AVX2 is enabled. > > [1] - https://gcc.gnu.org/ml/gcc-cvs/2011-09/msg00318.html > > -- > Thanks, K > > commit e30c86b06968416e7401a113b866ae353311aa10 > Author: Kirill Yukhin <kirill.yuk...@intel.com> > Date: Wed Mar 23 14:08:07 2016 +0300 > > AVX2. Emit vpcmpeqd for const_m1 only if AVX2 is enabled. > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index 1639704..7f5db75 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -10859,7 +10859,7 @@ standard_sse_constant_opcode (rtx_insn *insn, rtx x) > || get_attr_mode (insn) == MODE_V8DF > || get_attr_mode (insn) == MODE_V16SF) > return "vpternlogd\t{$0xFF, %g0, %g0, %g0|%g0, %g0, %g0, 0xFF}"; > - if (TARGET_AVX) > + if (TARGET_AVX2) > return "vpcmpeqd\t%0, %0, %0"; > else > return "pcmpeqd\t%0, %0"; Jakub