diff mbox

[i386,AVX-512] Fix PR target/70325.

Message ID 20160321140016.GA58060@msticlxl57.ims.intel.com
State New
Headers show

Commit Message

Kirill Yukhin March 21, 2016, 2 p.m. UTC
Hello,
1s in mask in i386.c/builtin_description enables
built-ins for corresponding bits.
So, actually if there're 2 1s in it - any bit set
enables built-in.

AVX-512VL exploits mask in opposite way.
E.g.:
  { OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_loaddquv16hi_mask, "__builtin_ia32_loaddqu
hi256_mask", IX86_BUILTIN_LOADDQUHI256_MASK, UNKNOWN, (int) V16HI_FTYPE_PCV16HI_V16HI_UHI },

This means that built-in enabled if *both* bits are set to 1.

So, I've added special handling for OPTION_MASK_ISA_AVX512VL
into i386.c/def_builtin.

Bootstrapped and regtested.

Richard,
is it ok for main trunk?

PR target/70325
gcc/
	* config/i386/i386.c (def_builtin): Handle
	OPTION_MASK_ISA_AVX512VL to be and-ed with other
	bits.
gcc/testsuite/
	* gcc.target/i386/pr70325.c: New test.

--
Thanks, K

commit 68c7dd92daad8d4365d0dcd3b1aa4c3ba2658660
Author: Kirill Yukhin <kirill.yukhin@intel.com>
Date:   Mon Mar 21 14:28:58 2016 +0300

    AVX-512. Fix PR70325.

Comments

Richard Biener March 21, 2016, 2:04 p.m. UTC | #1
On Mon, 21 Mar 2016, Kirill Yukhin wrote:

> Hello,
> 1s in mask in i386.c/builtin_description enables
> built-ins for corresponding bits.
> So, actually if there're 2 1s in it - any bit set
> enables built-in.
> 
> AVX-512VL exploits mask in opposite way.
> E.g.:
>   { OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_loaddquv16hi_mask, "__builtin_ia32_loaddqu
> hi256_mask", IX86_BUILTIN_LOADDQUHI256_MASK, UNKNOWN, (int) V16HI_FTYPE_PCV16HI_V16HI_UHI },
> 
> This means that built-in enabled if *both* bits are set to 1.
> 
> So, I've added special handling for OPTION_MASK_ISA_AVX512VL
> into i386.c/def_builtin.
> 
> Bootstrapped and regtested.
> 
> Richard,
> is it ok for main trunk?

I defer to Uros.

Richard.

> 
> PR target/70325
> gcc/
> 	* config/i386/i386.c (def_builtin): Handle
> 	OPTION_MASK_ISA_AVX512VL to be and-ed with other
> 	bits.
> gcc/testsuite/
> 	* gcc.target/i386/pr70325.c: New test.
> 
> --
> Thanks, K
> 
> commit 68c7dd92daad8d4365d0dcd3b1aa4c3ba2658660
> Author: Kirill Yukhin <kirill.yukhin@intel.com>
> Date:   Mon Mar 21 14:28:58 2016 +0300
> 
>     AVX-512. Fix PR70325.
> 
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index 3d8dbc4..9df5055 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -32429,6 +32429,9 @@ def_builtin (HOST_WIDE_INT mask, const char *name,
>      {
>        ix86_builtins_isa[(int) code].isa = mask;
>  
> +      if (mask & ix86_isa_flags & OPTION_MASK_ISA_AVX512VL)
> +	  mask &= ~OPTION_MASK_ISA_AVX512VL;
> +
>        mask &= ~OPTION_MASK_ISA_64BIT;
>        if (mask == 0
>  	  || (mask & ix86_isa_flags) != 0
> diff --git a/gcc/testsuite/gcc.target/i386/pr70325.c b/gcc/testsuite/gcc.target/i386/pr70325.c
> new file mode 100644
> index 0000000..e2b9342
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/pr70325.c
> @@ -0,0 +1,12 @@
> +/* PR target/70325 */
> +/* { dg-do compile } */
> +/* { dg-options "-mavx512vl -O2" } */
> +
> +typedef char C __attribute((__vector_size__(32)));
> +typedef int I __attribute((__vector_size__(32)));
> +
> +void
> +f(int a,I b)
> +{
> +  __builtin_ia32_storedquqi256_mask((C*)f,(C)b,a); /* { dg-warning "implicit declaration of function" } */
> +}
> 
>
diff mbox

Patch

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 3d8dbc4..9df5055 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -32429,6 +32429,9 @@  def_builtin (HOST_WIDE_INT mask, const char *name,
     {
       ix86_builtins_isa[(int) code].isa = mask;
 
+      if (mask & ix86_isa_flags & OPTION_MASK_ISA_AVX512VL)
+	  mask &= ~OPTION_MASK_ISA_AVX512VL;
+
       mask &= ~OPTION_MASK_ISA_64BIT;
       if (mask == 0
 	  || (mask & ix86_isa_flags) != 0
diff --git a/gcc/testsuite/gcc.target/i386/pr70325.c b/gcc/testsuite/gcc.target/i386/pr70325.c
new file mode 100644
index 0000000..e2b9342
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70325.c
@@ -0,0 +1,12 @@ 
+/* PR target/70325 */
+/* { dg-do compile } */
+/* { dg-options "-mavx512vl -O2" } */
+
+typedef char C __attribute((__vector_size__(32)));
+typedef int I __attribute((__vector_size__(32)));
+
+void
+f(int a,I b)
+{
+  __builtin_ia32_storedquqi256_mask((C*)f,(C)b,a); /* { dg-warning "implicit declaration of function" } */
+}