public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] target/100312 - make x86 masked load builtins pure
@ 2021-04-28 11:02 Richard Biener
  2021-04-28 11:23 ` Uros Bizjak
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Biener @ 2021-04-28 11:02 UTC (permalink / raw)
  To: gcc-patches; +Cc: jakub, ubizjak

This arranges for the x86 AVX and AVX2 masked load builtins to be
pure to enable dead code elimination and more appropriate alias
analysis.

Bootstrapped and tested on x86_64-unknown-linux-gnu.  OK for trunk?

Thanks,
Richard.

2021-04-28  Richard Biener  <rguenther@suse.de>

	PR target/100312
	* config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD,
	IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256,
	IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD,
	IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256,
	IX86_BUILTIN_MASKLOADQ256): Remove.
	* config/i386/i386-builtins.h (ix86_builtins): Add entries for
	IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
	IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
	IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
	IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256.
	* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
	Initialize IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
	IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
	IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
	IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
	as pure builtins.
---
 gcc/config/i386/i386-builtin.def |  8 --------
 gcc/config/i386/i386-builtins.c  | 19 +++++++++++++++++++
 gcc/config/i386/i386-builtins.h  |  8 ++++++++
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/gcc/config/i386/i386-builtin.def b/gcc/config/i386/i386-builtin.def
index 4dbd4f23647..dc0452de645 100644
--- a/gcc/config/i386/i386-builtin.def
+++ b/gcc/config/i386/i386-builtin.def
@@ -187,10 +187,6 @@ BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv4di, "__builtin_ia32_movntdq25
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv4df, "__builtin_ia32_movntpd256", IX86_BUILTIN_MOVNTPD256, UNKNOWN, (int) VOID_FTYPE_PDOUBLE_V4DF)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv8sf, "__builtin_ia32_movntps256", IX86_BUILTIN_MOVNTPS256, UNKNOWN, (int) VOID_FTYPE_PFLOAT_V8SF)
 
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd, "__builtin_ia32_maskloadpd", IX86_BUILTIN_MASKLOADPD, UNKNOWN, (int) V2DF_FTYPE_PCV2DF_V2DI)
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps, "__builtin_ia32_maskloadps", IX86_BUILTIN_MASKLOADPS, UNKNOWN, (int) V4SF_FTYPE_PCV4SF_V4SI)
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd256, "__builtin_ia32_maskloadpd256", IX86_BUILTIN_MASKLOADPD256, UNKNOWN, (int) V4DF_FTYPE_PCV4DF_V4DI)
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps256, "__builtin_ia32_maskloadps256", IX86_BUILTIN_MASKLOADPS256, UNKNOWN, (int) V8SF_FTYPE_PCV8SF_V8SI)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstorepd, "__builtin_ia32_maskstorepd", IX86_BUILTIN_MASKSTOREPD, UNKNOWN, (int) VOID_FTYPE_PV2DF_V2DI_V2DF)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstoreps, "__builtin_ia32_maskstoreps", IX86_BUILTIN_MASKSTOREPS, UNKNOWN, (int) VOID_FTYPE_PV4SF_V4SI_V4SF)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstorepd256, "__builtin_ia32_maskstorepd256", IX86_BUILTIN_MASKSTOREPD256, UNKNOWN, (int) VOID_FTYPE_PV4DF_V4DI_V4DF)
@@ -198,10 +194,6 @@ BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstoreps256, "__builtin_ia32_mask
 
 /* AVX2 */
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_movntdqa, "__builtin_ia32_movntdqa256", IX86_BUILTIN_MOVNTDQA256, UNKNOWN, (int) V4DI_FTYPE_PV4DI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd, "__builtin_ia32_maskloadd", IX86_BUILTIN_MASKLOADD, UNKNOWN, (int) V4SI_FTYPE_PCV4SI_V4SI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq, "__builtin_ia32_maskloadq", IX86_BUILTIN_MASKLOADQ, UNKNOWN, (int) V2DI_FTYPE_PCV2DI_V2DI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd256, "__builtin_ia32_maskloadd256", IX86_BUILTIN_MASKLOADD256, UNKNOWN, (int) V8SI_FTYPE_PCV8SI_V8SI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq256, "__builtin_ia32_maskloadq256", IX86_BUILTIN_MASKLOADQ256, UNKNOWN, (int) V4DI_FTYPE_PCV4DI_V4DI)
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstored, "__builtin_ia32_maskstored", IX86_BUILTIN_MASKSTORED, UNKNOWN, (int) VOID_FTYPE_PV4SI_V4SI_V4SI)
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstoreq, "__builtin_ia32_maskstoreq", IX86_BUILTIN_MASKSTOREQ, UNKNOWN, (int) VOID_FTYPE_PV2DI_V2DI_V2DI)
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstored256, "__builtin_ia32_maskstored256", IX86_BUILTIN_MASKSTORED256, UNKNOWN, (int) VOID_FTYPE_PV8SI_V8SI_V8SI)
diff --git a/gcc/config/i386/i386-builtins.c b/gcc/config/i386/i386-builtins.c
index 128bd39816c..2ffcbe5cd3e 100644
--- a/gcc/config/i386/i386-builtins.c
+++ b/gcc/config/i386/i386-builtins.c
@@ -667,7 +667,26 @@ ix86_init_mmx_sse_builtins (void)
 	       "__builtin_ia32_rdrand64_step", INT_FTYPE_PULONGLONG,
 	       IX86_BUILTIN_RDRAND64_STEP);
 
+  /* AVX */
+  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadpd",
+		    V2DF_FTYPE_PCV2DF_V2DI, IX86_BUILTIN_MASKLOADPD);
+  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadps",
+		    V4SF_FTYPE_PCV4SF_V4SI, IX86_BUILTIN_MASKLOADPS);
+  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadpd256",
+		    V4DF_FTYPE_PCV4DF_V4DI, IX86_BUILTIN_MASKLOADPD256);
+  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadps256",
+		    V8SF_FTYPE_PCV8SF_V8SI, IX86_BUILTIN_MASKLOADPS256);
+
   /* AVX2 */
+  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadd",
+		    V4SI_FTYPE_PCV4SI_V4SI, IX86_BUILTIN_MASKLOADD);
+  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadq",
+		    V2DI_FTYPE_PCV2DI_V2DI, IX86_BUILTIN_MASKLOADQ);
+  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadd256",
+		    V8SI_FTYPE_PCV8SI_V8SI, IX86_BUILTIN_MASKLOADD256);
+  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadq256",
+		    V4DI_FTYPE_PCV4DI_V4DI, IX86_BUILTIN_MASKLOADQ256);
+
   def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_gathersiv2df",
 		    V2DF_FTYPE_V2DF_PCDOUBLE_V4SI_V2DF_INT,
 		    IX86_BUILTIN_GATHERSIV2DF);
diff --git a/gcc/config/i386/i386-builtins.h b/gcc/config/i386/i386-builtins.h
index 0641808c7a7..6a5e249e382 100644
--- a/gcc/config/i386/i386-builtins.h
+++ b/gcc/config/i386/i386-builtins.h
@@ -60,6 +60,14 @@ enum ix86_builtins
   IX86_BUILTIN_VEC_SET_V8HI,
   IX86_BUILTIN_VEC_SET_V4HI,
   IX86_BUILTIN_VEC_SET_V16QI,
+  IX86_BUILTIN_MASKLOADPD,
+  IX86_BUILTIN_MASKLOADPS,
+  IX86_BUILTIN_MASKLOADPD256,
+  IX86_BUILTIN_MASKLOADPS256,
+  IX86_BUILTIN_MASKLOADD,
+  IX86_BUILTIN_MASKLOADQ,
+  IX86_BUILTIN_MASKLOADD256,
+  IX86_BUILTIN_MASKLOADQ256,
   IX86_BUILTIN_GATHERSIV2DF,
   IX86_BUILTIN_GATHERSIV4DF,
   IX86_BUILTIN_GATHERDIV2DF,
-- 
2.26.2

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/100312 - make x86 masked load builtins pure
  2021-04-28 11:02 [PATCH] target/100312 - make x86 masked load builtins pure Richard Biener
@ 2021-04-28 11:23 ` Uros Bizjak
  2021-04-28 11:46   ` Richard Biener
  0 siblings, 1 reply; 8+ messages in thread
From: Uros Bizjak @ 2021-04-28 11:23 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, Jakub Jelinek

On Wed, Apr 28, 2021 at 1:02 PM Richard Biener <rguenther@suse.de> wrote:
>
> This arranges for the x86 AVX and AVX2 masked load builtins to be
> pure to enable dead code elimination and more appropriate alias
> analysis.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu.  OK for trunk?
>
> Thanks,
> Richard.
>
> 2021-04-28  Richard Biener  <rguenther@suse.de>
>
>         PR target/100312
>         * config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD,
>         IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256,
>         IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD,
>         IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256,
>         IX86_BUILTIN_MASKLOADQ256): Remove.
>         * config/i386/i386-builtins.h (ix86_builtins): Add entries for
>         IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
>         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
>         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
>         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256.
>         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
>         Initialize IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
>         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
>         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
>         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
>         as pure builtins.

OK.

Thanks,
Uros.

> ---
>  gcc/config/i386/i386-builtin.def |  8 --------
>  gcc/config/i386/i386-builtins.c  | 19 +++++++++++++++++++
>  gcc/config/i386/i386-builtins.h  |  8 ++++++++
>  3 files changed, 27 insertions(+), 8 deletions(-)
>
> diff --git a/gcc/config/i386/i386-builtin.def b/gcc/config/i386/i386-builtin.def
> index 4dbd4f23647..dc0452de645 100644
> --- a/gcc/config/i386/i386-builtin.def
> +++ b/gcc/config/i386/i386-builtin.def
> @@ -187,10 +187,6 @@ BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv4di, "__builtin_ia32_movntdq25
>  BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv4df, "__builtin_ia32_movntpd256", IX86_BUILTIN_MOVNTPD256, UNKNOWN, (int) VOID_FTYPE_PDOUBLE_V4DF)
>  BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv8sf, "__builtin_ia32_movntps256", IX86_BUILTIN_MOVNTPS256, UNKNOWN, (int) VOID_FTYPE_PFLOAT_V8SF)
>
> -BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd, "__builtin_ia32_maskloadpd", IX86_BUILTIN_MASKLOADPD, UNKNOWN, (int) V2DF_FTYPE_PCV2DF_V2DI)
> -BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps, "__builtin_ia32_maskloadps", IX86_BUILTIN_MASKLOADPS, UNKNOWN, (int) V4SF_FTYPE_PCV4SF_V4SI)
> -BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd256, "__builtin_ia32_maskloadpd256", IX86_BUILTIN_MASKLOADPD256, UNKNOWN, (int) V4DF_FTYPE_PCV4DF_V4DI)
> -BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps256, "__builtin_ia32_maskloadps256", IX86_BUILTIN_MASKLOADPS256, UNKNOWN, (int) V8SF_FTYPE_PCV8SF_V8SI)
>  BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstorepd, "__builtin_ia32_maskstorepd", IX86_BUILTIN_MASKSTOREPD, UNKNOWN, (int) VOID_FTYPE_PV2DF_V2DI_V2DF)
>  BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstoreps, "__builtin_ia32_maskstoreps", IX86_BUILTIN_MASKSTOREPS, UNKNOWN, (int) VOID_FTYPE_PV4SF_V4SI_V4SF)
>  BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstorepd256, "__builtin_ia32_maskstorepd256", IX86_BUILTIN_MASKSTOREPD256, UNKNOWN, (int) VOID_FTYPE_PV4DF_V4DI_V4DF)
> @@ -198,10 +194,6 @@ BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstoreps256, "__builtin_ia32_mask
>
>  /* AVX2 */
>  BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_movntdqa, "__builtin_ia32_movntdqa256", IX86_BUILTIN_MOVNTDQA256, UNKNOWN, (int) V4DI_FTYPE_PV4DI)
> -BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd, "__builtin_ia32_maskloadd", IX86_BUILTIN_MASKLOADD, UNKNOWN, (int) V4SI_FTYPE_PCV4SI_V4SI)
> -BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq, "__builtin_ia32_maskloadq", IX86_BUILTIN_MASKLOADQ, UNKNOWN, (int) V2DI_FTYPE_PCV2DI_V2DI)
> -BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd256, "__builtin_ia32_maskloadd256", IX86_BUILTIN_MASKLOADD256, UNKNOWN, (int) V8SI_FTYPE_PCV8SI_V8SI)
> -BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq256, "__builtin_ia32_maskloadq256", IX86_BUILTIN_MASKLOADQ256, UNKNOWN, (int) V4DI_FTYPE_PCV4DI_V4DI)
>  BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstored, "__builtin_ia32_maskstored", IX86_BUILTIN_MASKSTORED, UNKNOWN, (int) VOID_FTYPE_PV4SI_V4SI_V4SI)
>  BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstoreq, "__builtin_ia32_maskstoreq", IX86_BUILTIN_MASKSTOREQ, UNKNOWN, (int) VOID_FTYPE_PV2DI_V2DI_V2DI)
>  BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstored256, "__builtin_ia32_maskstored256", IX86_BUILTIN_MASKSTORED256, UNKNOWN, (int) VOID_FTYPE_PV8SI_V8SI_V8SI)
> diff --git a/gcc/config/i386/i386-builtins.c b/gcc/config/i386/i386-builtins.c
> index 128bd39816c..2ffcbe5cd3e 100644
> --- a/gcc/config/i386/i386-builtins.c
> +++ b/gcc/config/i386/i386-builtins.c
> @@ -667,7 +667,26 @@ ix86_init_mmx_sse_builtins (void)
>                "__builtin_ia32_rdrand64_step", INT_FTYPE_PULONGLONG,
>                IX86_BUILTIN_RDRAND64_STEP);
>
> +  /* AVX */
> +  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadpd",
> +                   V2DF_FTYPE_PCV2DF_V2DI, IX86_BUILTIN_MASKLOADPD);
> +  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadps",
> +                   V4SF_FTYPE_PCV4SF_V4SI, IX86_BUILTIN_MASKLOADPS);
> +  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadpd256",
> +                   V4DF_FTYPE_PCV4DF_V4DI, IX86_BUILTIN_MASKLOADPD256);
> +  def_builtin_pure (OPTION_MASK_ISA_AVX, 0, "__builtin_ia32_maskloadps256",
> +                   V8SF_FTYPE_PCV8SF_V8SI, IX86_BUILTIN_MASKLOADPS256);
> +
>    /* AVX2 */
> +  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadd",
> +                   V4SI_FTYPE_PCV4SI_V4SI, IX86_BUILTIN_MASKLOADD);
> +  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadq",
> +                   V2DI_FTYPE_PCV2DI_V2DI, IX86_BUILTIN_MASKLOADQ);
> +  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadd256",
> +                   V8SI_FTYPE_PCV8SI_V8SI, IX86_BUILTIN_MASKLOADD256);
> +  def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_maskloadq256",
> +                   V4DI_FTYPE_PCV4DI_V4DI, IX86_BUILTIN_MASKLOADQ256);
> +
>    def_builtin_pure (OPTION_MASK_ISA_AVX2, 0, "__builtin_ia32_gathersiv2df",
>                     V2DF_FTYPE_V2DF_PCDOUBLE_V4SI_V2DF_INT,
>                     IX86_BUILTIN_GATHERSIV2DF);
> diff --git a/gcc/config/i386/i386-builtins.h b/gcc/config/i386/i386-builtins.h
> index 0641808c7a7..6a5e249e382 100644
> --- a/gcc/config/i386/i386-builtins.h
> +++ b/gcc/config/i386/i386-builtins.h
> @@ -60,6 +60,14 @@ enum ix86_builtins
>    IX86_BUILTIN_VEC_SET_V8HI,
>    IX86_BUILTIN_VEC_SET_V4HI,
>    IX86_BUILTIN_VEC_SET_V16QI,
> +  IX86_BUILTIN_MASKLOADPD,
> +  IX86_BUILTIN_MASKLOADPS,
> +  IX86_BUILTIN_MASKLOADPD256,
> +  IX86_BUILTIN_MASKLOADPS256,
> +  IX86_BUILTIN_MASKLOADD,
> +  IX86_BUILTIN_MASKLOADQ,
> +  IX86_BUILTIN_MASKLOADD256,
> +  IX86_BUILTIN_MASKLOADQ256,
>    IX86_BUILTIN_GATHERSIV2DF,
>    IX86_BUILTIN_GATHERSIV4DF,
>    IX86_BUILTIN_GATHERDIV2DF,
> --
> 2.26.2

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/100312 - make x86 masked load builtins pure
  2021-04-28 11:23 ` Uros Bizjak
@ 2021-04-28 11:46   ` Richard Biener
  2021-04-28 12:11     ` Uros Bizjak
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Biener @ 2021-04-28 11:46 UTC (permalink / raw)
  To: Uros Bizjak; +Cc: gcc-patches, Jakub Jelinek

On Wed, 28 Apr 2021, Uros Bizjak wrote:

> On Wed, Apr 28, 2021 at 1:02 PM Richard Biener <rguenther@suse.de> wrote:
> >
> > This arranges for the x86 AVX and AVX2 masked load builtins to be
> > pure to enable dead code elimination and more appropriate alias
> > analysis.
> >
> > Bootstrapped and tested on x86_64-unknown-linux-gnu.  OK for trunk?
> >
> > Thanks,
> > Richard.
> >
> > 2021-04-28  Richard Biener  <rguenther@suse.de>
> >
> >         PR target/100312
> >         * config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD,
> >         IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256,
> >         IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD,
> >         IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256,
> >         IX86_BUILTIN_MASKLOADQ256): Remove.
> >         * config/i386/i386-builtins.h (ix86_builtins): Add entries for
> >         IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256.
> >         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
> >         Initialize IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
> >         as pure builtins.
> 
> OK.

Whoops - somehow I posted the wrong version.  The version posted
ICEs because I failed to realize I'd have to explicitely handle
those builtins in ix86_expand_builtin.  What bootstrapped and
tested OK is the version below.

Is that version also OK?

Thanks,
Richard.

From 44fb1b12c4b5ec649804d8ea40ebc087723ccc7f Mon Sep 17 00:00:00 2001
From: Richard Biener <rguenther@suse.de>
Date: Wed, 28 Apr 2021 12:09:03 +0200
Subject: [PATCH] target/100312 - make x86 masked load builtins pure
To: gcc-patches@gcc.gnu.org

This arranges for the x86 AVX and AVX2 masked load builtins to be
pure to enable dead code elimination and more appropriate alias
analysis.

2021-04-28  Richard Biener  <rguenther@suse.de>

	PR target/100312
	* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
	Arrange for IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
	IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
	IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
	IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
	to be defined as pure builtins.
---
 gcc/config/i386/i386-builtins.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/gcc/config/i386/i386-builtins.c b/gcc/config/i386/i386-builtins.c
index 128bd39816c..fa05cd6cf65 100644
--- a/gcc/config/i386/i386-builtins.c
+++ b/gcc/config/i386/i386-builtins.c
@@ -521,7 +521,17 @@ ix86_init_mmx_sse_builtins (void)
 	continue;
 
       ftype = (enum ix86_builtin_func_type) d->flag;
-      def_builtin (d->mask, d->mask2, d->name, ftype, d->code);
+      if (d->code == IX86_BUILTIN_MASKLOADPD
+	  || d->code == IX86_BUILTIN_MASKLOADPS
+	  || d->code == IX86_BUILTIN_MASKLOADPD256
+	  || d->code == IX86_BUILTIN_MASKLOADPS256
+	  || d->code == IX86_BUILTIN_MASKLOADD
+	  || d->code == IX86_BUILTIN_MASKLOADQ
+	  || d->code == IX86_BUILTIN_MASKLOADD256
+	  || d->code == IX86_BUILTIN_MASKLOADQ256)
+	def_builtin_pure (d->mask, d->mask2, d->name, ftype, d->code);
+      else
+	def_builtin (d->mask, d->mask2, d->name, ftype, d->code);
     }
   BDESC_VERIFYS (IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST,
 		 IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST,
-- 
2.26.2


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/100312 - make x86 masked load builtins pure
  2021-04-28 11:46   ` Richard Biener
@ 2021-04-28 12:11     ` Uros Bizjak
  2021-04-28 13:32       ` Richard Biener
  0 siblings, 1 reply; 8+ messages in thread
From: Uros Bizjak @ 2021-04-28 12:11 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, Jakub Jelinek

On Wed, Apr 28, 2021 at 1:46 PM Richard Biener <rguenther@suse.de> wrote:
>
> On Wed, 28 Apr 2021, Uros Bizjak wrote:
>
> > On Wed, Apr 28, 2021 at 1:02 PM Richard Biener <rguenther@suse.de> wrote:
> > >
> > > This arranges for the x86 AVX and AVX2 masked load builtins to be
> > > pure to enable dead code elimination and more appropriate alias
> > > analysis.
> > >
> > > Bootstrapped and tested on x86_64-unknown-linux-gnu.  OK for trunk?
> > >
> > > Thanks,
> > > Richard.
> > >
> > > 2021-04-28  Richard Biener  <rguenther@suse.de>
> > >
> > >         PR target/100312
> > >         * config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD,
> > >         IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256,
> > >         IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD,
> > >         IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256,
> > >         IX86_BUILTIN_MASKLOADQ256): Remove.
> > >         * config/i386/i386-builtins.h (ix86_builtins): Add entries for
> > >         IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256.
> > >         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
> > >         Initialize IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
> > >         as pure builtins.
> >
> > OK.
>
> Whoops - somehow I posted the wrong version.  The version posted
> ICEs because I failed to realize I'd have to explicitely handle
> those builtins in ix86_expand_builtin.  What bootstrapped and
> tested OK is the version below.
>
> Is that version also OK?

Hm, your previous version removed mentioned builtins from builtins.def
and initialized them in ix86_init_mmx_sse_builtins by hand (this seems
to be the preferred way). This should work, so I really don't see why
the previous approach would result in ICE.

Uros.

>
> Thanks,
> Richard.
>
> From 44fb1b12c4b5ec649804d8ea40ebc087723ccc7f Mon Sep 17 00:00:00 2001
> From: Richard Biener <rguenther@suse.de>
> Date: Wed, 28 Apr 2021 12:09:03 +0200
> Subject: [PATCH] target/100312 - make x86 masked load builtins pure
> To: gcc-patches@gcc.gnu.org
>
> This arranges for the x86 AVX and AVX2 masked load builtins to be
> pure to enable dead code elimination and more appropriate alias
> analysis.
>
> 2021-04-28  Richard Biener  <rguenther@suse.de>
>
>         PR target/100312
>         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
>         Arrange for IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
>         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
>         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
>         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
>         to be defined as pure builtins.
> ---
>  gcc/config/i386/i386-builtins.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/config/i386/i386-builtins.c b/gcc/config/i386/i386-builtins.c
> index 128bd39816c..fa05cd6cf65 100644
> --- a/gcc/config/i386/i386-builtins.c
> +++ b/gcc/config/i386/i386-builtins.c
> @@ -521,7 +521,17 @@ ix86_init_mmx_sse_builtins (void)
>         continue;
>
>        ftype = (enum ix86_builtin_func_type) d->flag;
> -      def_builtin (d->mask, d->mask2, d->name, ftype, d->code);
> +      if (d->code == IX86_BUILTIN_MASKLOADPD
> +         || d->code == IX86_BUILTIN_MASKLOADPS
> +         || d->code == IX86_BUILTIN_MASKLOADPD256
> +         || d->code == IX86_BUILTIN_MASKLOADPS256
> +         || d->code == IX86_BUILTIN_MASKLOADD
> +         || d->code == IX86_BUILTIN_MASKLOADQ
> +         || d->code == IX86_BUILTIN_MASKLOADD256
> +         || d->code == IX86_BUILTIN_MASKLOADQ256)
> +       def_builtin_pure (d->mask, d->mask2, d->name, ftype, d->code);
> +      else
> +       def_builtin (d->mask, d->mask2, d->name, ftype, d->code);
>      }
>    BDESC_VERIFYS (IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST,
>                  IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST,
> --
> 2.26.2
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/100312 - make x86 masked load builtins pure
  2021-04-28 12:11     ` Uros Bizjak
@ 2021-04-28 13:32       ` Richard Biener
  2021-04-28 15:07         ` Uros Bizjak
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Biener @ 2021-04-28 13:32 UTC (permalink / raw)
  To: Uros Bizjak; +Cc: gcc-patches, Jakub Jelinek

On Wed, 28 Apr 2021, Uros Bizjak wrote:

> On Wed, Apr 28, 2021 at 1:46 PM Richard Biener <rguenther@suse.de> wrote:
> >
> > On Wed, 28 Apr 2021, Uros Bizjak wrote:
> >
> > > On Wed, Apr 28, 2021 at 1:02 PM Richard Biener <rguenther@suse.de> wrote:
> > > >
> > > > This arranges for the x86 AVX and AVX2 masked load builtins to be
> > > > pure to enable dead code elimination and more appropriate alias
> > > > analysis.
> > > >
> > > > Bootstrapped and tested on x86_64-unknown-linux-gnu.  OK for trunk?
> > > >
> > > > Thanks,
> > > > Richard.
> > > >
> > > > 2021-04-28  Richard Biener  <rguenther@suse.de>
> > > >
> > > >         PR target/100312
> > > >         * config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD,
> > > >         IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256,
> > > >         IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD,
> > > >         IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256,
> > > >         IX86_BUILTIN_MASKLOADQ256): Remove.
> > > >         * config/i386/i386-builtins.h (ix86_builtins): Add entries for
> > > >         IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256.
> > > >         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
> > > >         Initialize IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
> > > >         as pure builtins.
> > >
> > > OK.
> >
> > Whoops - somehow I posted the wrong version.  The version posted
> > ICEs because I failed to realize I'd have to explicitely handle
> > those builtins in ix86_expand_builtin.  What bootstrapped and
> > tested OK is the version below.
> >
> > Is that version also OK?
> 
> Hm, your previous version removed mentioned builtins from builtins.def
> and initialized them in ix86_init_mmx_sse_builtins by hand (this seems
> to be the preferred way). This should work, so I really don't see why
> the previous approach would result in ICE.

It eventually runs into the gcc_unreachable () at the very end of
ix86_expand_builtin since IX86_BUILTIN_MASKLOADD and friends are
no longer in the range of IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST
to IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST.

Richard.

> Uros.
> 
> >
> > Thanks,
> > Richard.
> >
> > From 44fb1b12c4b5ec649804d8ea40ebc087723ccc7f Mon Sep 17 00:00:00 2001
> > From: Richard Biener <rguenther@suse.de>
> > Date: Wed, 28 Apr 2021 12:09:03 +0200
> > Subject: [PATCH] target/100312 - make x86 masked load builtins pure
> > To: gcc-patches@gcc.gnu.org
> >
> > This arranges for the x86 AVX and AVX2 masked load builtins to be
> > pure to enable dead code elimination and more appropriate alias
> > analysis.
> >
> > 2021-04-28  Richard Biener  <rguenther@suse.de>
> >
> >         PR target/100312
> >         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
> >         Arrange for IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
> >         to be defined as pure builtins.
> > ---
> >  gcc/config/i386/i386-builtins.c | 12 +++++++++++-
> >  1 file changed, 11 insertions(+), 1 deletion(-)
> >
> > diff --git a/gcc/config/i386/i386-builtins.c b/gcc/config/i386/i386-builtins.c
> > index 128bd39816c..fa05cd6cf65 100644
> > --- a/gcc/config/i386/i386-builtins.c
> > +++ b/gcc/config/i386/i386-builtins.c
> > @@ -521,7 +521,17 @@ ix86_init_mmx_sse_builtins (void)
> >         continue;
> >
> >        ftype = (enum ix86_builtin_func_type) d->flag;
> > -      def_builtin (d->mask, d->mask2, d->name, ftype, d->code);
> > +      if (d->code == IX86_BUILTIN_MASKLOADPD
> > +         || d->code == IX86_BUILTIN_MASKLOADPS
> > +         || d->code == IX86_BUILTIN_MASKLOADPD256
> > +         || d->code == IX86_BUILTIN_MASKLOADPS256
> > +         || d->code == IX86_BUILTIN_MASKLOADD
> > +         || d->code == IX86_BUILTIN_MASKLOADQ
> > +         || d->code == IX86_BUILTIN_MASKLOADD256
> > +         || d->code == IX86_BUILTIN_MASKLOADQ256)
> > +       def_builtin_pure (d->mask, d->mask2, d->name, ftype, d->code);
> > +      else
> > +       def_builtin (d->mask, d->mask2, d->name, ftype, d->code);
> >      }
> >    BDESC_VERIFYS (IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST,
> >                  IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST,
> > --
> > 2.26.2
> >
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/100312 - make x86 masked load builtins pure
  2021-04-28 13:32       ` Richard Biener
@ 2021-04-28 15:07         ` Uros Bizjak
  2021-04-29  7:25           ` Richard Biener
  0 siblings, 1 reply; 8+ messages in thread
From: Uros Bizjak @ 2021-04-28 15:07 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 2765 bytes --]

On Wed, Apr 28, 2021 at 3:32 PM Richard Biener <rguenther@suse.de> wrote:
>
> On Wed, 28 Apr 2021, Uros Bizjak wrote:
>
> > On Wed, Apr 28, 2021 at 1:46 PM Richard Biener <rguenther@suse.de> wrote:
> > >
> > > On Wed, 28 Apr 2021, Uros Bizjak wrote:
> > >
> > > > On Wed, Apr 28, 2021 at 1:02 PM Richard Biener <rguenther@suse.de> wrote:
> > > > >
> > > > > This arranges for the x86 AVX and AVX2 masked load builtins to be
> > > > > pure to enable dead code elimination and more appropriate alias
> > > > > analysis.
> > > > >
> > > > > Bootstrapped and tested on x86_64-unknown-linux-gnu.  OK for trunk?
> > > > >
> > > > > Thanks,
> > > > > Richard.
> > > > >
> > > > > 2021-04-28  Richard Biener  <rguenther@suse.de>
> > > > >
> > > > >         PR target/100312
> > > > >         * config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD,
> > > > >         IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256,
> > > > >         IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD,
> > > > >         IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256,
> > > > >         IX86_BUILTIN_MASKLOADQ256): Remove.
> > > > >         * config/i386/i386-builtins.h (ix86_builtins): Add entries for
> > > > >         IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > > > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > > > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > > > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256.
> > > > >         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
> > > > >         Initialize IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > > > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > > > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > > > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
> > > > >         as pure builtins.
> > > >
> > > > OK.
> > >
> > > Whoops - somehow I posted the wrong version.  The version posted
> > > ICEs because I failed to realize I'd have to explicitely handle
> > > those builtins in ix86_expand_builtin.  What bootstrapped and
> > > tested OK is the version below.
> > >
> > > Is that version also OK?
> >
> > Hm, your previous version removed mentioned builtins from builtins.def
> > and initialized them in ix86_init_mmx_sse_builtins by hand (this seems
> > to be the preferred way). This should work, so I really don't see why
> > the previous approach would result in ICE.
>
> It eventually runs into the gcc_unreachable () at the very end of
> ix86_expand_builtin since IX86_BUILTIN_MASKLOADD and friends are
> no longer in the range of IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST
> to IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST.

How about the attached (untested) patch then?

Uros.

[-- Attachment #2: p.diff.txt --]
[-- Type: text/plain, Size: 7326 bytes --]

diff --git a/gcc/config/i386/i386-builtin.def b/gcc/config/i386/i386-builtin.def
index 4dbd4f23647..80c2a2c0294 100644
--- a/gcc/config/i386/i386-builtin.def
+++ b/gcc/config/i386/i386-builtin.def
@@ -187,10 +187,6 @@ BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv4di, "__builtin_ia32_movntdq25
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv4df, "__builtin_ia32_movntpd256", IX86_BUILTIN_MOVNTPD256, UNKNOWN, (int) VOID_FTYPE_PDOUBLE_V4DF)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_movntv8sf, "__builtin_ia32_movntps256", IX86_BUILTIN_MOVNTPS256, UNKNOWN, (int) VOID_FTYPE_PFLOAT_V8SF)
 
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd, "__builtin_ia32_maskloadpd", IX86_BUILTIN_MASKLOADPD, UNKNOWN, (int) V2DF_FTYPE_PCV2DF_V2DI)
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps, "__builtin_ia32_maskloadps", IX86_BUILTIN_MASKLOADPS, UNKNOWN, (int) V4SF_FTYPE_PCV4SF_V4SI)
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd256, "__builtin_ia32_maskloadpd256", IX86_BUILTIN_MASKLOADPD256, UNKNOWN, (int) V4DF_FTYPE_PCV4DF_V4DI)
-BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps256, "__builtin_ia32_maskloadps256", IX86_BUILTIN_MASKLOADPS256, UNKNOWN, (int) V8SF_FTYPE_PCV8SF_V8SI)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstorepd, "__builtin_ia32_maskstorepd", IX86_BUILTIN_MASKSTOREPD, UNKNOWN, (int) VOID_FTYPE_PV2DF_V2DI_V2DF)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstoreps, "__builtin_ia32_maskstoreps", IX86_BUILTIN_MASKSTOREPS, UNKNOWN, (int) VOID_FTYPE_PV4SF_V4SI_V4SF)
 BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstorepd256, "__builtin_ia32_maskstorepd256", IX86_BUILTIN_MASKSTOREPD256, UNKNOWN, (int) VOID_FTYPE_PV4DF_V4DI_V4DF)
@@ -198,10 +194,6 @@ BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskstoreps256, "__builtin_ia32_mask
 
 /* AVX2 */
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_movntdqa, "__builtin_ia32_movntdqa256", IX86_BUILTIN_MOVNTDQA256, UNKNOWN, (int) V4DI_FTYPE_PV4DI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd, "__builtin_ia32_maskloadd", IX86_BUILTIN_MASKLOADD, UNKNOWN, (int) V4SI_FTYPE_PCV4SI_V4SI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq, "__builtin_ia32_maskloadq", IX86_BUILTIN_MASKLOADQ, UNKNOWN, (int) V2DI_FTYPE_PCV2DI_V2DI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd256, "__builtin_ia32_maskloadd256", IX86_BUILTIN_MASKLOADD256, UNKNOWN, (int) V8SI_FTYPE_PCV8SI_V8SI)
-BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq256, "__builtin_ia32_maskloadq256", IX86_BUILTIN_MASKLOADQ256, UNKNOWN, (int) V4DI_FTYPE_PCV4DI_V4DI)
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstored, "__builtin_ia32_maskstored", IX86_BUILTIN_MASKSTORED, UNKNOWN, (int) VOID_FTYPE_PV4SI_V4SI_V4SI)
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstoreq, "__builtin_ia32_maskstoreq", IX86_BUILTIN_MASKSTOREQ, UNKNOWN, (int) VOID_FTYPE_PV2DI_V2DI_V2DI)
 BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskstored256, "__builtin_ia32_maskstored256", IX86_BUILTIN_MASKSTORED256, UNKNOWN, (int) VOID_FTYPE_PV8SI_V8SI_V8SI)
@@ -473,7 +465,22 @@ BDESC (0, OPTION_MASK_ISA2_WIDEKL, CODE_FOR_nothing, "__builtin_ia32_aesdecwide2
 BDESC (0, OPTION_MASK_ISA2_WIDEKL, CODE_FOR_nothing, "__builtin_ia32_aesencwide128kl_u8", IX86_BUILTIN_AESENCWIDE128KLU8, UNKNOWN, (int) UINT8_FTYPE_PV2DI_PCV2DI_PCVOID)
 BDESC (0, OPTION_MASK_ISA2_WIDEKL, CODE_FOR_nothing, "__builtin_ia32_aesencwide256kl_u8", IX86_BUILTIN_AESENCWIDE256KLU8, UNKNOWN, (int) UINT8_FTYPE_PV2DI_PCV2DI_PCVOID)
 
-BDESC_END (SPECIAL_ARGS, ARGS)
+BDESC_END (SPECIAL_ARGS, PURE_ARGS)
+
+/* AVX */
+BDESC_FIRST (pure_args, PURE_ARGS,
+       OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd, "__builtin_ia32_maskloadpd", IX86_BUILTIN_MASKLOADPD, UNKNOWN, (int) V2DF_FTYPE_PCV2DF_V2DI)
+BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps, "__builtin_ia32_maskloadps", IX86_BUILTIN_MASKLOADPS, UNKNOWN, (int) V4SF_FTYPE_PCV4SF_V4SI)
+BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadpd256, "__builtin_ia32_maskloadpd256", IX86_BUILTIN_MASKLOADPD256, UNKNOWN, (int) V4DF_FTYPE_PCV4DF_V4DI)
+BDESC (OPTION_MASK_ISA_AVX, 0, CODE_FOR_avx_maskloadps256, "__builtin_ia32_maskloadps256", IX86_BUILTIN_MASKLOADPS256, UNKNOWN, (int) V8SF_FTYPE_PCV8SF_V8SI)
+
+/* AVX2 */
+BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd, "__builtin_ia32_maskloadd", IX86_BUILTIN_MASKLOADD, UNKNOWN, (int) V4SI_FTYPE_PCV4SI_V4SI)
+BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq, "__builtin_ia32_maskloadq", IX86_BUILTIN_MASKLOADQ, UNKNOWN, (int) V2DI_FTYPE_PCV2DI_V2DI)
+BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadd256, "__builtin_ia32_maskloadd256", IX86_BUILTIN_MASKLOADD256, UNKNOWN, (int) V8SI_FTYPE_PCV8SI_V8SI)
+BDESC (OPTION_MASK_ISA_AVX2, 0, CODE_FOR_avx2_maskloadq256, "__builtin_ia32_maskloadq256", IX86_BUILTIN_MASKLOADQ256, UNKNOWN, (int) V4DI_FTYPE_PCV4DI_V4DI)
+
+BDESC_END (PURE_ARGS, ARGS)
 
 /* Builtins with variable number of arguments.  */
 BDESC_FIRST (args, ARGS,
diff --git a/gcc/config/i386/i386-builtins.c b/gcc/config/i386/i386-builtins.c
index 128bd39816c..b66911082ab 100644
--- a/gcc/config/i386/i386-builtins.c
+++ b/gcc/config/i386/i386-builtins.c
@@ -108,8 +108,10 @@ BDESC_VERIFYS (IX86_BUILTIN__BDESC_PCMPISTR_FIRST,
 	       IX86_BUILTIN__BDESC_PCMPESTR_LAST, 1);
 BDESC_VERIFYS (IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST,
 	       IX86_BUILTIN__BDESC_PCMPISTR_LAST, 1);
-BDESC_VERIFYS (IX86_BUILTIN__BDESC_ARGS_FIRST,
+BDESC_VERIFYS (IX86_BUILTIN__BDESC_PURE_ARGS_FIRST,
 	       IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST, 1);
+BDESC_VERIFYS (IX86_BUILTIN__BDESC_ARGS_FIRST,
+	       IX86_BUILTIN__BDESC_PURE_ARGS_LAST, 1);
 BDESC_VERIFYS (IX86_BUILTIN__BDESC_ROUND_ARGS_FIRST,
 	       IX86_BUILTIN__BDESC_ARGS_LAST, 1);
 BDESC_VERIFYS (IX86_BUILTIN__BDESC_MULTI_ARG_FIRST,
@@ -527,7 +529,23 @@ ix86_init_mmx_sse_builtins (void)
 		 IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST,
 		 ARRAY_SIZE (bdesc_special_args) - 1);
 
-  /* Add all builtins with variable number of operands.  */
+  /* Add all pure builtins with variable number of operands.  */
+  for (i = 0, d = bdesc_pure_args;
+       i < ARRAY_SIZE (bdesc_pure_args);
+       i++, d++)
+    {
+      BDESC_VERIFY (d->code, IX86_BUILTIN__BDESC_PURE_ARGS_FIRST, i);
+      if (d->name == 0)
+	continue;
+
+      ftype = (enum ix86_builtin_func_type) d->flag;
+      def_builtin_pure (d->mask, d->mask2, d->name, ftype, d->code);
+    }
+  BDESC_VERIFYS (IX86_BUILTIN__BDESC_PURE_ARGS_LAST,
+		 IX86_BUILTIN__BDESC_PURE_ARGS_FIRST,
+		 ARRAY_SIZE (bdesc_pure_args) - 1);
+
+  /* Add all const builtins with variable number of operands.  */
   for (i = 0, d = bdesc_args;
        i < ARRAY_SIZE (bdesc_args);
        i++, d++)
diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
index 516440eb5c1..76990628150 100644
--- a/gcc/config/i386/i386-expand.c
+++ b/gcc/config/i386/i386-expand.c
@@ -13240,6 +13240,14 @@ rdseed_step:
 					       target);
     }
 
+  if (fcode >= IX86_BUILTIN__BDESC_PURE_ARGS_FIRST
+      && fcode <= IX86_BUILTIN__BDESC_PURE_ARGS_LAST)
+    {
+      i = fcode - IX86_BUILTIN__BDESC_PURE_ARGS_FIRST;
+      return ix86_expand_special_args_builtin (bdesc_pure_args + i, exp,
+					       target);
+    }
+
   if (fcode >= IX86_BUILTIN__BDESC_ARGS_FIRST
       && fcode <= IX86_BUILTIN__BDESC_ARGS_LAST)
     {

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/100312 - make x86 masked load builtins pure
  2021-04-28 15:07         ` Uros Bizjak
@ 2021-04-29  7:25           ` Richard Biener
  2021-04-29 14:48             ` Uros Bizjak
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Biener @ 2021-04-29  7:25 UTC (permalink / raw)
  To: Uros Bizjak; +Cc: gcc-patches, Jakub Jelinek

On Wed, 28 Apr 2021, Uros Bizjak wrote:

> On Wed, Apr 28, 2021 at 3:32 PM Richard Biener <rguenther@suse.de> wrote:
> >
> > On Wed, 28 Apr 2021, Uros Bizjak wrote:
> >
> > > On Wed, Apr 28, 2021 at 1:46 PM Richard Biener <rguenther@suse.de> wrote:
> > > >
> > > > On Wed, 28 Apr 2021, Uros Bizjak wrote:
> > > >
> > > > > On Wed, Apr 28, 2021 at 1:02 PM Richard Biener <rguenther@suse.de> wrote:
> > > > > >
> > > > > > This arranges for the x86 AVX and AVX2 masked load builtins to be
> > > > > > pure to enable dead code elimination and more appropriate alias
> > > > > > analysis.
> > > > > >
> > > > > > Bootstrapped and tested on x86_64-unknown-linux-gnu.  OK for trunk?
> > > > > >
> > > > > > Thanks,
> > > > > > Richard.
> > > > > >
> > > > > > 2021-04-28  Richard Biener  <rguenther@suse.de>
> > > > > >
> > > > > >         PR target/100312
> > > > > >         * config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD,
> > > > > >         IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256,
> > > > > >         IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD,
> > > > > >         IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256,
> > > > > >         IX86_BUILTIN_MASKLOADQ256): Remove.
> > > > > >         * config/i386/i386-builtins.h (ix86_builtins): Add entries for
> > > > > >         IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > > > > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > > > > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > > > > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256.
> > > > > >         * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
> > > > > >         Initialize IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
> > > > > >         IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
> > > > > >         IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
> > > > > >         IX86_BUILTIN_MASKLOADD256, and IX86_BUILTIN_MASKLOADQ256
> > > > > >         as pure builtins.
> > > > >
> > > > > OK.
> > > >
> > > > Whoops - somehow I posted the wrong version.  The version posted
> > > > ICEs because I failed to realize I'd have to explicitely handle
> > > > those builtins in ix86_expand_builtin.  What bootstrapped and
> > > > tested OK is the version below.
> > > >
> > > > Is that version also OK?
> > >
> > > Hm, your previous version removed mentioned builtins from builtins.def
> > > and initialized them in ix86_init_mmx_sse_builtins by hand (this seems
> > > to be the preferred way). This should work, so I really don't see why
> > > the previous approach would result in ICE.
> >
> > It eventually runs into the gcc_unreachable () at the very end of
> > ix86_expand_builtin since IX86_BUILTIN_MASKLOADD and friends are
> > no longer in the range of IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST
> > to IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST.
> 
> How about the attached (untested) patch then?

Ah yeah - good idea.

The patch works, bootstrapped and tested on x86_64-unknown-linux-gnu.

As expected it reduces the number of masked load builtins for the
PR99912 testcase from ~800 to ~350 (at the GIMPLE level).

Thanks,
Richard.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/100312 - make x86 masked load builtins pure
  2021-04-29  7:25           ` Richard Biener
@ 2021-04-29 14:48             ` Uros Bizjak
  0 siblings, 0 replies; 8+ messages in thread
From: Uros Bizjak @ 2021-04-29 14:48 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, Jakub Jelinek

On Thu, Apr 29, 2021 at 9:25 AM Richard Biener <rguenther@suse.de> wrote:

> > > It eventually runs into the gcc_unreachable () at the very end of
> > > ix86_expand_builtin since IX86_BUILTIN_MASKLOADD and friends are
> > > no longer in the range of IX86_BUILTIN__BDESC_SPECIAL_ARGS_FIRST
> > > to IX86_BUILTIN__BDESC_SPECIAL_ARGS_LAST.
> >
> > How about the attached (untested) patch then?
>
> Ah yeah - good idea.
>
> The patch works, bootstrapped and tested on x86_64-unknown-linux-gnu.
>
> As expected it reduces the number of masked load builtins for the
> PR99912 testcase from ~800 to ~350 (at the GIMPLE level).

Thanks, pushed with the following ChangeLog:

i386: Mark x86 masked load builtins pure [PR100312]

Mark x86 AVX and AVX2 masked load builtins pure to enable dead code
elimination and more appropriate alias analysis.

2021-04-29  Uroš Bizjak  <ubizjak@gmail.com>
        Richard Biener  <rguenther@suse.de>
gcc/
    PR target/100312
    * config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD)
    (IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256)
    (IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD)
    (IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256)
    (IX86_BUILTIN_MASKLOADQ256): Move from SPECIAL_ARGS
    to PURE_ARGS category.
    * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
    Handle PURE_ARGS category.
    * config/i386/i386-expand.c (ix86_expand_builtin): Ditto.

Uros.


> Thanks,
> Richard.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-04-29 14:48 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-28 11:02 [PATCH] target/100312 - make x86 masked load builtins pure Richard Biener
2021-04-28 11:23 ` Uros Bizjak
2021-04-28 11:46   ` Richard Biener
2021-04-28 12:11     ` Uros Bizjak
2021-04-28 13:32       ` Richard Biener
2021-04-28 15:07         ` Uros Bizjak
2021-04-29  7:25           ` Richard Biener
2021-04-29 14:48             ` Uros Bizjak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).