On Wed, Mar 23, 2016 at 12:28 PM, Kirill Yukhin <[email protected]> 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?
>
> 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
No, the change is OK (standard_sse_constant_p does all the checks),
but nowadays we could write this part as:
--cut here--
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 1639704..59154c3 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -10859,10 +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)
- return "vpcmpeqd\t%0, %0, %0";
- else
- return "pcmpeqd\t%0, %0";
+ return "%vpcmpeqd\t%0, %d0";
default:
break;
-- cut here--
Uros.
> --
> Thanks, K
>
> commit e30c86b06968416e7401a113b866ae353311aa10
> Author: Kirill Yukhin <[email protected]>
> 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";
>