The vectorizer is confused about the spurious VDEFs that are caused
by gather vectorization so the following avoids them by making the
builtins pure appropriately.

Bootstrap / regtest pending on x86_64-unknown-linux-gnu, ok for
trunk and branch?

Thanks,
Richard.

2017-06-23  Richard Biener  <rguent...@suse.de>

        PR target/81175
        * config/i386/i386.c (struct builtin_isa): Add pure_p member.
        (def_builtin2): Initialize pure_p.
        (ix86_add_new_builtins): Honor pure_p.
        (def_builtin_pure): New function.
        (ix86_init_mmx_sse_builtins): Use def_builtin_pure for all
        gather builtins.

        * gfortran.dg/pr81175.f: New testcase.

Index: gcc/config/i386/i386.c
===================================================================
*** gcc/config/i386/i386.c      (revision 249586)
--- gcc/config/i386/i386.c      (working copy)
*************** struct builtin_isa {
*** 31074,31079 ****
--- 31074,31080 ----
    HOST_WIDE_INT isa;          /* isa_flags this builtin is defined for */
    HOST_WIDE_INT isa2;         /* additional isa_flags this builtin is defined 
for */
    bool const_p;                       /* true if the declaration is constant 
*/
+   bool pure_p;                        /* true if the declaration is pure */
    bool leaf_p;                        /* true if the declaration has leaf 
attribute */
    bool nothrow_p;             /* true if the declaration has nothrow 
attribute */
    bool set_and_not_built_p;
*************** def_builtin_const (HOST_WIDE_INT mask, c
*** 31166,31171 ****
--- 31167,31187 ----
    return decl;
  }
  
+ /* Like def_builtin, but also marks the function decl "pure".  */
+ 
+ static inline tree
+ def_builtin_pure (HOST_WIDE_INT mask, const char *name,
+                 enum ix86_builtin_func_type tcode, enum ix86_builtins code)
+ {
+   tree decl = def_builtin (mask, name, tcode, code);
+   if (decl)
+     DECL_PURE_P (decl) = 1;
+   else
+     ix86_builtins_isa[(int) code].pure_p = true;
+ 
+   return decl;
+ }
+ 
  /* Like def_builtin, but for additional isa2 flags.  */
  
  static inline tree
*************** def_builtin2 (HOST_WIDE_INT mask, const
*** 31200,31205 ****
--- 31216,31222 ----
        ix86_builtins_isa[(int) code].leaf_p = false;
        ix86_builtins_isa[(int) code].nothrow_p = false;
        ix86_builtins_isa[(int) code].const_p = false;
+       ix86_builtins_isa[(int) code].pure_p = false;
        ix86_builtins_isa[(int) code].set_and_not_built_p = true;
      }
  
*************** ix86_add_new_builtins (HOST_WIDE_INT isa
*** 31259,31264 ****
--- 31276,31283 ----
          ix86_builtins[i] = decl;
          if (ix86_builtins_isa[i].const_p)
            TREE_READONLY (decl) = 1;
+         if (ix86_builtins_isa[i].pure_p)
+           DECL_PURE_P (decl) = 1;
          if (ix86_builtins_isa[i].leaf_p)
            DECL_ATTRIBUTES (decl) = build_tree_list (get_identifier ("leaf"),
                                                      NULL_TREE);
*************** ix86_init_mmx_sse_builtins (void)
*** 31663,31796 ****
               IX86_BUILTIN_RDRAND64_STEP);
  
    /* AVX2 */
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv2df",
!              V2DF_FTYPE_V2DF_PCDOUBLE_V4SI_V2DF_INT,
!              IX86_BUILTIN_GATHERSIV2DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4df",
!              V4DF_FTYPE_V4DF_PCDOUBLE_V4SI_V4DF_INT,
!              IX86_BUILTIN_GATHERSIV4DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv2df",
!              V2DF_FTYPE_V2DF_PCDOUBLE_V2DI_V2DF_INT,
!              IX86_BUILTIN_GATHERDIV2DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4df",
!              V4DF_FTYPE_V4DF_PCDOUBLE_V4DI_V4DF_INT,
!              IX86_BUILTIN_GATHERDIV4DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4sf",
!              V4SF_FTYPE_V4SF_PCFLOAT_V4SI_V4SF_INT,
!              IX86_BUILTIN_GATHERSIV4SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv8sf",
!              V8SF_FTYPE_V8SF_PCFLOAT_V8SI_V8SF_INT,
!              IX86_BUILTIN_GATHERSIV8SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4sf",
!              V4SF_FTYPE_V4SF_PCFLOAT_V2DI_V4SF_INT,
!              IX86_BUILTIN_GATHERDIV4SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4sf256",
!              V4SF_FTYPE_V4SF_PCFLOAT_V4DI_V4SF_INT,
!              IX86_BUILTIN_GATHERDIV8SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv2di",
!              V2DI_FTYPE_V2DI_PCINT64_V4SI_V2DI_INT,
!              IX86_BUILTIN_GATHERSIV2DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4di",
!              V4DI_FTYPE_V4DI_PCINT64_V4SI_V4DI_INT,
!              IX86_BUILTIN_GATHERSIV4DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv2di",
!              V2DI_FTYPE_V2DI_PCINT64_V2DI_V2DI_INT,
!              IX86_BUILTIN_GATHERDIV2DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4di",
!              V4DI_FTYPE_V4DI_PCINT64_V4DI_V4DI_INT,
!              IX86_BUILTIN_GATHERDIV4DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4si",
!              V4SI_FTYPE_V4SI_PCINT_V4SI_V4SI_INT,
!              IX86_BUILTIN_GATHERSIV4SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv8si",
!              V8SI_FTYPE_V8SI_PCINT_V8SI_V8SI_INT,
!              IX86_BUILTIN_GATHERSIV8SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4si",
!              V4SI_FTYPE_V4SI_PCINT_V2DI_V4SI_INT,
!              IX86_BUILTIN_GATHERDIV4SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4si256",
!              V4SI_FTYPE_V4SI_PCINT_V4DI_V4SI_INT,
!              IX86_BUILTIN_GATHERDIV8SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltsiv4df ",
!              V4DF_FTYPE_V4DF_PCDOUBLE_V8SI_V4DF_INT,
!              IX86_BUILTIN_GATHERALTSIV4DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltdiv4sf256 ",
!              V8SF_FTYPE_V8SF_PCFLOAT_V4DI_V8SF_INT,
!              IX86_BUILTIN_GATHERALTDIV8SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltsiv4di ",
!              V4DI_FTYPE_V4DI_PCINT64_V8SI_V4DI_INT,
!              IX86_BUILTIN_GATHERALTSIV4DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltdiv4si256 ",
!              V8SI_FTYPE_V8SI_PCINT_V4DI_V8SI_INT,
!              IX86_BUILTIN_GATHERALTDIV8SI);
  
    /* AVX512F */
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv16sf",
!              V16SF_FTYPE_V16SF_PCVOID_V16SI_HI_INT,
!              IX86_BUILTIN_GATHER3SIV16SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv8df",
!              V8DF_FTYPE_V8DF_PCVOID_V8SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV8DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv16sf",
!              V8SF_FTYPE_V8SF_PCVOID_V8DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV16SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv8df",
!              V8DF_FTYPE_V8DF_PCVOID_V8DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV8DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv16si",
!              V16SI_FTYPE_V16SI_PCVOID_V16SI_HI_INT,
!              IX86_BUILTIN_GATHER3SIV16SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv8di",
!              V8DI_FTYPE_V8DI_PCVOID_V8SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV8DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv16si",
!              V8SI_FTYPE_V8SI_PCVOID_V8DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV16SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv8di",
!              V8DI_FTYPE_V8DI_PCVOID_V8DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV8DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltsiv8df ",
!              V8DF_FTYPE_V8DF_PCDOUBLE_V16SI_QI_INT,
!              IX86_BUILTIN_GATHER3ALTSIV8DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltdiv8sf ",
!              V16SF_FTYPE_V16SF_PCFLOAT_V8DI_HI_INT,
!              IX86_BUILTIN_GATHER3ALTDIV16SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltsiv8di ",
!              V8DI_FTYPE_V8DI_PCINT64_V16SI_QI_INT,
!              IX86_BUILTIN_GATHER3ALTSIV8DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltdiv8si ",
!              V16SI_FTYPE_V16SI_PCINT_V8DI_HI_INT,
!              IX86_BUILTIN_GATHER3ALTDIV16SI);
  
    def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_scattersiv16sf",
               VOID_FTYPE_PVOID_HI_V16SI_V16SF_INT,
--- 31682,31815 ----
               IX86_BUILTIN_RDRAND64_STEP);
  
    /* AVX2 */
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv2df",
!                   V2DF_FTYPE_V2DF_PCDOUBLE_V4SI_V2DF_INT,
!                   IX86_BUILTIN_GATHERSIV2DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4df",
!                   V4DF_FTYPE_V4DF_PCDOUBLE_V4SI_V4DF_INT,
!                   IX86_BUILTIN_GATHERSIV4DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv2df",
!                   V2DF_FTYPE_V2DF_PCDOUBLE_V2DI_V2DF_INT,
!                   IX86_BUILTIN_GATHERDIV2DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4df",
!                   V4DF_FTYPE_V4DF_PCDOUBLE_V4DI_V4DF_INT,
!                   IX86_BUILTIN_GATHERDIV4DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4sf",
!                   V4SF_FTYPE_V4SF_PCFLOAT_V4SI_V4SF_INT,
!                   IX86_BUILTIN_GATHERSIV4SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv8sf",
!                   V8SF_FTYPE_V8SF_PCFLOAT_V8SI_V8SF_INT,
!                   IX86_BUILTIN_GATHERSIV8SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4sf",
!                   V4SF_FTYPE_V4SF_PCFLOAT_V2DI_V4SF_INT,
!                   IX86_BUILTIN_GATHERDIV4SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4sf256",
!                   V4SF_FTYPE_V4SF_PCFLOAT_V4DI_V4SF_INT,
!                   IX86_BUILTIN_GATHERDIV8SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv2di",
!                   V2DI_FTYPE_V2DI_PCINT64_V4SI_V2DI_INT,
!                   IX86_BUILTIN_GATHERSIV2DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4di",
!                   V4DI_FTYPE_V4DI_PCINT64_V4SI_V4DI_INT,
!                   IX86_BUILTIN_GATHERSIV4DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv2di",
!                   V2DI_FTYPE_V2DI_PCINT64_V2DI_V2DI_INT,
!                   IX86_BUILTIN_GATHERDIV2DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4di",
!                   V4DI_FTYPE_V4DI_PCINT64_V4DI_V4DI_INT,
!                   IX86_BUILTIN_GATHERDIV4DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv4si",
!                   V4SI_FTYPE_V4SI_PCINT_V4SI_V4SI_INT,
!                   IX86_BUILTIN_GATHERSIV4SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gathersiv8si",
!                   V8SI_FTYPE_V8SI_PCINT_V8SI_V8SI_INT,
!                   IX86_BUILTIN_GATHERSIV8SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4si",
!                   V4SI_FTYPE_V4SI_PCINT_V2DI_V4SI_INT,
!                   IX86_BUILTIN_GATHERDIV4SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatherdiv4si256",
!                   V4SI_FTYPE_V4SI_PCINT_V4DI_V4SI_INT,
!                   IX86_BUILTIN_GATHERDIV8SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltsiv4df ",
!                   V4DF_FTYPE_V4DF_PCDOUBLE_V8SI_V4DF_INT,
!                   IX86_BUILTIN_GATHERALTSIV4DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltdiv4sf256 
",
!                   V8SF_FTYPE_V8SF_PCFLOAT_V4DI_V8SF_INT,
!                   IX86_BUILTIN_GATHERALTDIV8SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltsiv4di ",
!                   V4DI_FTYPE_V4DI_PCINT64_V8SI_V4DI_INT,
!                   IX86_BUILTIN_GATHERALTSIV4DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX2, "__builtin_ia32_gatheraltdiv4si256 
",
!                   V8SI_FTYPE_V8SI_PCINT_V4DI_V8SI_INT,
!                   IX86_BUILTIN_GATHERALTDIV8SI);
  
    /* AVX512F */
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv16sf",
!                   V16SF_FTYPE_V16SF_PCVOID_V16SI_HI_INT,
!                   IX86_BUILTIN_GATHER3SIV16SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv8df",
!                   V8DF_FTYPE_V8DF_PCVOID_V8SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV8DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv16sf",
!                   V8SF_FTYPE_V8SF_PCVOID_V8DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV16SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv8df",
!                   V8DF_FTYPE_V8DF_PCVOID_V8DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV8DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv16si",
!                   V16SI_FTYPE_V16SI_PCVOID_V16SI_HI_INT,
!                   IX86_BUILTIN_GATHER3SIV16SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gathersiv8di",
!                   V8DI_FTYPE_V8DI_PCVOID_V8SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV8DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv16si",
!                   V8SI_FTYPE_V8SI_PCVOID_V8DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV16SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatherdiv8di",
!                   V8DI_FTYPE_V8DI_PCVOID_V8DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV8DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltsiv8df 
",
!                   V8DF_FTYPE_V8DF_PCDOUBLE_V16SI_QI_INT,
!                   IX86_BUILTIN_GATHER3ALTSIV8DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltdiv8sf 
",
!                   V16SF_FTYPE_V16SF_PCFLOAT_V8DI_HI_INT,
!                   IX86_BUILTIN_GATHER3ALTDIV16SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltsiv8di 
",
!                   V8DI_FTYPE_V8DI_PCINT64_V16SI_QI_INT,
!                   IX86_BUILTIN_GATHER3ALTSIV8DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_gatheraltdiv8si 
",
!                   V16SI_FTYPE_V16SI_PCINT_V8DI_HI_INT,
!                   IX86_BUILTIN_GATHER3ALTDIV16SI);
  
    def_builtin (OPTION_MASK_ISA_AVX512F, "__builtin_ia32_scattersiv16sf",
               VOID_FTYPE_PVOID_HI_V16SI_V16SF_INT,
*************** ix86_init_mmx_sse_builtins (void)
*** 31825,31909 ****
               IX86_BUILTIN_SCATTERDIV8DI);
  
    /* AVX512VL */
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv2df",
!              V2DF_FTYPE_V2DF_PCVOID_V4SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV2DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4df",
!              V4DF_FTYPE_V4DF_PCVOID_V4SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV4DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div2df",
!              V2DF_FTYPE_V2DF_PCVOID_V2DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV2DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4df",
!              V4DF_FTYPE_V4DF_PCVOID_V4DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV4DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4sf",
!              V4SF_FTYPE_V4SF_PCVOID_V4SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV4SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv8sf",
!              V8SF_FTYPE_V8SF_PCVOID_V8SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV8SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4sf",
!              V4SF_FTYPE_V4SF_PCVOID_V2DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV4SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div8sf",
!              V4SF_FTYPE_V4SF_PCVOID_V4DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV8SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv2di",
!              V2DI_FTYPE_V2DI_PCVOID_V4SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV2DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4di",
!              V4DI_FTYPE_V4DI_PCVOID_V4SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV4DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div2di",
!              V2DI_FTYPE_V2DI_PCVOID_V2DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV2DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4di",
!              V4DI_FTYPE_V4DI_PCVOID_V4DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV4DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4si",
!              V4SI_FTYPE_V4SI_PCVOID_V4SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV4SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv8si",
!              V8SI_FTYPE_V8SI_PCVOID_V8SI_QI_INT,
!              IX86_BUILTIN_GATHER3SIV8SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4si",
!              V4SI_FTYPE_V4SI_PCVOID_V2DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV4SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div8si",
!              V4SI_FTYPE_V4SI_PCVOID_V4DI_QI_INT,
!              IX86_BUILTIN_GATHER3DIV8SI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3altsiv4df ",
!              V4DF_FTYPE_V4DF_PCDOUBLE_V8SI_QI_INT,
!              IX86_BUILTIN_GATHER3ALTSIV4DF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3altdiv8sf ",
!              V8SF_FTYPE_V8SF_PCFLOAT_V4DI_QI_INT,
!              IX86_BUILTIN_GATHER3ALTDIV8SF);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3altsiv4di ",
!              V4DI_FTYPE_V4DI_PCINT64_V8SI_QI_INT,
!              IX86_BUILTIN_GATHER3ALTSIV4DI);
! 
!   def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3altdiv8si ",
!              V8SI_FTYPE_V8SI_PCINT_V4DI_QI_INT,
!              IX86_BUILTIN_GATHER3ALTDIV8SI);
  
    def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_scattersiv8sf",
               VOID_FTYPE_PVOID_QI_V8SI_V8SF_INT,
--- 31844,31928 ----
               IX86_BUILTIN_SCATTERDIV8DI);
  
    /* AVX512VL */
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv2df",
!                   V2DF_FTYPE_V2DF_PCVOID_V4SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV2DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4df",
!                   V4DF_FTYPE_V4DF_PCVOID_V4SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV4DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div2df",
!                   V2DF_FTYPE_V2DF_PCVOID_V2DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV2DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4df",
!                   V4DF_FTYPE_V4DF_PCVOID_V4DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV4DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4sf",
!                   V4SF_FTYPE_V4SF_PCVOID_V4SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV4SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv8sf",
!                   V8SF_FTYPE_V8SF_PCVOID_V8SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV8SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4sf",
!                   V4SF_FTYPE_V4SF_PCVOID_V2DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV4SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div8sf",
!                   V4SF_FTYPE_V4SF_PCVOID_V4DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV8SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv2di",
!                   V2DI_FTYPE_V2DI_PCVOID_V4SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV2DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4di",
!                   V4DI_FTYPE_V4DI_PCVOID_V4SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV4DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div2di",
!                   V2DI_FTYPE_V2DI_PCVOID_V2DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV2DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4di",
!                   V4DI_FTYPE_V4DI_PCVOID_V4DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV4DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv4si",
!                   V4SI_FTYPE_V4SI_PCVOID_V4SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV4SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3siv8si",
!                   V8SI_FTYPE_V8SI_PCVOID_V8SI_QI_INT,
!                   IX86_BUILTIN_GATHER3SIV8SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div4si",
!                   V4SI_FTYPE_V4SI_PCVOID_V2DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV4SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_gather3div8si",
!                   V4SI_FTYPE_V4SI_PCVOID_V4DI_QI_INT,
!                   IX86_BUILTIN_GATHER3DIV8SI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, 
"__builtin_ia32_gather3altsiv4df ",
!                   V4DF_FTYPE_V4DF_PCDOUBLE_V8SI_QI_INT,
!                   IX86_BUILTIN_GATHER3ALTSIV4DF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, 
"__builtin_ia32_gather3altdiv8sf ",
!                   V8SF_FTYPE_V8SF_PCFLOAT_V4DI_QI_INT,
!                   IX86_BUILTIN_GATHER3ALTDIV8SF);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, 
"__builtin_ia32_gather3altsiv4di ",
!                   V4DI_FTYPE_V4DI_PCINT64_V8SI_QI_INT,
!                   IX86_BUILTIN_GATHER3ALTSIV4DI);
! 
!   def_builtin_pure (OPTION_MASK_ISA_AVX512VL, 
"__builtin_ia32_gather3altdiv8si ",
!                   V8SI_FTYPE_V8SI_PCINT_V4DI_QI_INT,
!                   IX86_BUILTIN_GATHER3ALTDIV8SI);
  
    def_builtin (OPTION_MASK_ISA_AVX512VL, "__builtin_ia32_scattersiv8sf",
               VOID_FTYPE_PVOID_QI_V8SI_V8SF_INT,
*************** ix86_init_mmx_sse_builtins (void)
*** 31985,32002 ****
               IX86_BUILTIN_SCATTERALTDIV16SI);
  
    /* AVX512PF */
!   def_builtin (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfdpd",
!              VOID_FTYPE_QI_V8SI_PCVOID_INT_INT,
!              IX86_BUILTIN_GATHERPFDPD);
!   def_builtin (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfdps",
!              VOID_FTYPE_HI_V16SI_PCVOID_INT_INT,
!              IX86_BUILTIN_GATHERPFDPS);
!   def_builtin (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfqpd",
!              VOID_FTYPE_QI_V8DI_PCVOID_INT_INT,
!              IX86_BUILTIN_GATHERPFQPD);
!   def_builtin (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfqps",
!              VOID_FTYPE_QI_V8DI_PCVOID_INT_INT,
!              IX86_BUILTIN_GATHERPFQPS);
    def_builtin (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_scatterpfdpd",
               VOID_FTYPE_QI_V8SI_PCVOID_INT_INT,
               IX86_BUILTIN_SCATTERPFDPD);
--- 32004,32021 ----
               IX86_BUILTIN_SCATTERALTDIV16SI);
  
    /* AVX512PF */
!   def_builtin_pure (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfdpd",
!                   VOID_FTYPE_QI_V8SI_PCVOID_INT_INT,
!                   IX86_BUILTIN_GATHERPFDPD);
!   def_builtin_pure (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfdps",
!                   VOID_FTYPE_HI_V16SI_PCVOID_INT_INT,
!                   IX86_BUILTIN_GATHERPFDPS);
!   def_builtin_pure (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfqpd",
!                   VOID_FTYPE_QI_V8DI_PCVOID_INT_INT,
!                   IX86_BUILTIN_GATHERPFQPD);
!   def_builtin_pure (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_gatherpfqps",
!                   VOID_FTYPE_QI_V8DI_PCVOID_INT_INT,
!                   IX86_BUILTIN_GATHERPFQPS);
    def_builtin (OPTION_MASK_ISA_AVX512PF, "__builtin_ia32_scatterpfdpd",
               VOID_FTYPE_QI_V8SI_PCVOID_INT_INT,
               IX86_BUILTIN_SCATTERPFDPD);
Index: gcc/testsuite/gfortran.dg/pr81175.f
===================================================================
*** gcc/testsuite/gfortran.dg/pr81175.f (nonexistent)
--- gcc/testsuite/gfortran.dg/pr81175.f (working copy)
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do compile }
+ ! { dg-options "-Ofast -fwrapv" }
+ ! { dg-additional-options "-march=broadwell" { target x86_64-*-* i?86-*-* } }
+       SUBROUTINE ECPDRA(IC4C,FP,FQ,G)
+       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+       DIMENSION FP(*),FQ(*),G(*)
+       DIMENSION CKLU(23,12,12)
+ !
+       DO 240 I=IAMIN,IAMAX
+          DO 240 J=JAMIN,MMAX
+             DO 230 K=1,NPNP
+                DO 230 L=1,K
+                   DO 230 MU=1,2*L-1
+                      CKLTEM= CKLU(MU,L,K)
+                      IF(IC4C.LE.0) THEN
+                         IF(ABS(CKLTEM).GT.TOL) SUM= SUM+FP(N)*CKLTEM
+                      ELSE
+                         IF(ABS(CKLTEM).GT.TOL) SUM= SUM+FQ(N)*CKLTEM
+                      END IF
+   230       N= N+1
+             G(NN)= G(NN)+DUMJ*SUM
+   240 NN= NN+1
+       END

Reply via email to