This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, i386, AVX] Fix typo in i386.c/standard_sse_constant_opcode ().
- From: Kirill Yukhin <kirill dot yukhin at gmail dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Richard Biener <rguenther at suse dot de>, GCC Patches <gcc-patches at gcc dot gnu dot org>, Uros Bizjak <ubizjak at gmail dot com>
- Date: Wed, 23 Mar 2016 14:47:54 +0300
- Subject: Re: [PATCH, i386, AVX] Fix typo in i386.c/standard_sse_constant_opcode ().
- Authentication-results: sourceware.org; auth=none
- References: <20160323112150 dot GA59478 at msticlxl57 dot ims dot intel dot com> <20160323114111 dot GW3017 at tucnak dot redhat dot com>
On 23 Mar 12:41, Jakub Jelinek wrote:
> 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.
You're right. I've updated the patch to check mode size as well.
--
Thanks, K
commit ae82089e3a4244d870737a7022e66e87042da811
Author: Kirill Yukhin <kirill.yukhin@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..963cc3d 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 || get_attr_mode (insn) == 16)
return "vpcmpeqd\t%0, %0, %0";
else
return "pcmpeqd\t%0, %0";