On Sat, Nov 19, 2016 at 9:05 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Fri, Nov 18, 2016 at 09:30:06PM +0100, Jakub Jelinek wrote: >> On Fri, Nov 18, 2016 at 08:41:01PM +0100, Jakub Jelinek wrote: >> > I'm seeing lots of ICEs with this. >> >> Here is untested fix for that, will bootstrap/regtest it soon (after my >> current set of bootstraps finishes). >> >> 2016-11-18 Jakub Jelinek <ja...@redhat.com> >> >> * config/i386/i386.c (ix86_expand_builtin): Remove msk_mov variable, >> don't initialize it, don't use it for the case where it isn't >> provable %{z} nor using the same argument, instead move merge >> argument into a new pseudo and use that as target. Formatting fixes. > > Now successfully bootstrapped/regtested on x86_64-linux and i686-linux and > fixed a couple of FAILs, but not tons of others. > > Here is another patch I'm going to test which fixes many other FAILs, but > still some are left: > FAIL: gcc.target/i386/funcspec-3.c (internal compiler error) > FAIL: gcc.target/i386/funcspec-3.c (test for excess errors) > FAIL: gcc.target/i386/mvc1.c (internal compiler error) > FAIL: gcc.target/i386/mvc1.c (test for excess errors) > FAIL: gcc.target/i386/mvc6.c (internal compiler error) > FAIL: gcc.target/i386/mvc6.c (test for excess errors) > FAIL: gcc.target/i386/mvc6.c scan-assembler vpshufb > FAIL: gcc.target/i386/mvc6.c scan-assembler punpcklbw > FAIL: gcc.target/i386/mvc8.c (internal compiler error) > FAIL: gcc.target/i386/mvc8.c (test for excess errors) > FAIL: gcc.target/i386/pr67995-2.c (internal compiler error) > FAIL: gcc.target/i386/pr67995-2.c (test for excess errors) > FAIL: gcc.target/i386/pr71652-3.c (internal compiler error) > FAIL: gcc.target/i386/pr71652-3.c (test for errors, line 5) > FAIL: gcc.target/i386/pr71652-3.c (test for excess errors)
I wonder why patch submitter didn't get these failures during regtesting. There are plenty of tests (the above multi-vrsioning tests) that depend on correct handling of ISA variables. I assumed that these tests passed and consequently didn't went deep into the implementation, but rather requested a couple of additional tests that exercised added functionality.some more. > Will debug even those. Thanks! Uros. > 2016-11-19 Jakub Jelinek <ja...@redhat.com> > > * config/i386/i386.c (def_builtin, def_builtin2, def_builtin_const2, > ix86_add_new_builtins): Formatting fixes. > (ix86_expand_builtin): Use || instead of && for isa vs. isa2. > (ix86_get_builtin): Likewise. > > --- gcc/config/i386/i386.c.jj 2016-11-18 22:30:16.000000000 +0100 > +++ gcc/config/i386/i386.c 2016-11-19 08:37:45.748175866 +0100 > @@ -30924,7 +30924,7 @@ def_builtin (HOST_WIDE_INT mask, const c > means that *both* cpuid bits must be set for the built-in to be > available. > Handle this here. */ > if (mask & ix86_isa_flags & OPTION_MASK_ISA_AVX512VL) > - mask &= ~OPTION_MASK_ISA_AVX512VL; > + mask &= ~OPTION_MASK_ISA_AVX512VL; > > mask &= ~OPTION_MASK_ISA_64BIT; > if (mask == 0 > @@ -30976,8 +30976,8 @@ def_builtin_const (HOST_WIDE_INT mask, c > > static inline tree > def_builtin2 (HOST_WIDE_INT mask, const char *name, > - enum ix86_builtin_func_type tcode, > - enum ix86_builtins code) > + enum ix86_builtin_func_type tcode, > + enum ix86_builtins code) > { > tree decl = NULL_TREE; > > @@ -30992,8 +30992,8 @@ def_builtin2 (HOST_WIDE_INT mask, const > tree type = ix86_get_builtin_func_type (tcode); > decl = add_builtin_function (name, type, code, BUILT_IN_MD, > NULL, NULL_TREE); > - ix86_builtins[(int) code] = decl; > - ix86_builtins_isa[(int) code].set_and_not_built_p = false; > + ix86_builtins[(int) code] = decl; > + ix86_builtins_isa[(int) code].set_and_not_built_p = false; > } > else > { > @@ -31016,7 +31016,7 @@ def_builtin2 (HOST_WIDE_INT mask, const > > static inline tree > def_builtin_const2 (HOST_WIDE_INT mask, const char *name, > - enum ix86_builtin_func_type tcode, enum ix86_builtins code) > + enum ix86_builtin_func_type tcode, enum ix86_builtins > code) > { > tree decl = def_builtin2 (mask, name, tcode, code); > if (decl) > @@ -31034,8 +31034,8 @@ def_builtin_const2 (HOST_WIDE_INT mask, > static void > ix86_add_new_builtins (HOST_WIDE_INT isa, HOST_WIDE_INT isa2) > { > - if (((isa & deferred_isa_values) == 0) > - && ((isa2 & deferred_isa_values2) == 0)) > + if ((isa & deferred_isa_values) == 0 > + && (isa2 & deferred_isa_values2) == 0) > return; > > /* Bits in ISA value can be removed from potential isa values. */ > @@ -31048,7 +31048,8 @@ ix86_add_new_builtins (HOST_WIDE_INT isa > > for (i = 0; i < (int)IX86_BUILTIN_MAX; i++) > { > - if ((((ix86_builtins_isa[i].isa & isa) != 0) || > ((ix86_builtins_isa[i].isa2 & isa2) != 0)) > + if (((ix86_builtins_isa[i].isa & isa) != 0 > + || (ix86_builtins_isa[i].isa2 & isa2) != 0) > && ix86_builtins_isa[i].set_and_not_built_p) > { > tree decl, type; > @@ -36549,7 +36550,7 @@ ix86_expand_builtin (tree exp, rtx targe > whether it is supported. */ > if ((ix86_builtins_isa[fcode].isa > && !(ix86_builtins_isa[fcode].isa & ix86_isa_flags)) > - && (ix86_builtins_isa[fcode].isa2 > + || (ix86_builtins_isa[fcode].isa2 > && !(ix86_builtins_isa[fcode].isa2 & ix86_isa_flags2))) > { > char *opts = ix86_target_string (ix86_builtins_isa[fcode].isa, > @@ -38514,7 +38515,7 @@ static tree ix86_get_builtin (enum ix86_ > opts = TREE_TARGET_OPTION (target_tree); > > if ((ix86_builtins_isa[(int) code].isa & opts->x_ix86_isa_flags) > - && (ix86_builtins_isa[(int) code].isa2 & opts->x_ix86_isa_flags2)) > + || (ix86_builtins_isa[(int) code].isa2 & opts->x_ix86_isa_flags2)) > return ix86_builtin_decl (code, true); > else > return NULL_TREE; > > > Jakub