On Mon, Jan 26, 2015 at 10:04 AM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Sun, Jan 25, 2015 at 10:37 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >> On Sun, Jan 25, 2015 at 7:23 PM, Uros Bizjak <ubiz...@gmail.com> wrote: >>> On Sat, Jan 24, 2015 at 11:49 AM, Allan Sandfeld Jensen >>> <al...@carewolf.com> wrote: >>>> On Saturday 24 January 2015, Uros Bizjak wrote: >>>>> On Mon, Jan 12, 2015 at 6:02 PM, Uros Bizjak <ubiz...@gmail.com> wrote: >>>>> > Hello! >>>>> > >>>>> >>> On Wed, Dec 31, 2014 at 01:28:47PM +0100, Allan Sandfeld Jensen wrote: >>>>> >>> > I recently wanted to use multiversioning for BMI2 specific >>>>> >>> > extensions >>>>> >>> > PDEP/PEXT, and noticed it wasn't there. So I wrote this patch to add >>>>> >>> > it, and also added AES, F16C and BMI1 for completeness. >>>>> >>> >>>>> >>> AES nor F16C doesn't make any sense IMHO for multiversioning, you need >>>>> >>> special intrinsics for that anyway and when you use them, the function >>>>> >>> will fail to compile without those features. >>>>> >>> Multiversioning only makes sense for ISA features the compiler uses >>>>> >>> for >>>>> >>> normal C/C++ code without any intrinsics. >>>>> >> >>>>> >> Patch reduced to just adding BMI and BMI2 multiversioning: >>>>> > +2014-12-29 Allan Sandfeld Jensen <sandf...@kde.org> >>>>> > + >>>>> > + * config/i386/i386.c (get_builtin_code_for_version): Add >>>>> > + support for BMI and BMI2 multiversion functions. >>>>> > >>>>> > +2014-12-29 Allan Sandfeld Jensen <sandf...@kde.org> >>>>> > + >>>>> > + * gcc.target/i386/funcspec-5.c: Test new multiversion targets. >>>>> > + * g++.dg/ext/mv17.C: Test BMI/BMI2 multiversion dispatcher. >>>>> > >>>>> > +2014-12-29 Allan Sandfeld Jensen <sandf...@kde.org> >>>>> > + >>>>> > + * config/i386/cpuinfo.c (enum processor_features): Add FEATURE_BMI and >>>>> > + FEATURE_BMI2. >>>>> > + (get_available_features): Detect FEATURE_BMI and FEATURE_BMI2. >>>>> > >>>>> > OK for mainline >>>>> >>>>> Allan, did you commit the patch to mainline? I don't see it in SVN logs. >>>>> >>>>> (If you don't have SVN commit access, please mention it in the patch >>>>> submission, so someone will commit the patch for you). >>>>> >>>> Sorry. I don't have SVN commit access. >>> >>> Committed with a bunch of fixes (e.g. missing fold_builtin_cpu part in >>> gcc/config/i386/i386.c, and mv17.C test didn't compile at all due to >>> missing parenthesis). >> >> ... and now with committed ChangeLog and patch. >> >> gcc/ChangeLog: >> >> * config/i386/i386.c (get_builtin_code_for_version): Add >> support for BMI and BMI2 multiversion functions. >> (fold_builtin_cpu): Add F_BMI and F_BMI2. >> >> libgcc/ChangeLog: >> >> * config/i386/cpuinfo.c (enum processor_features): Add FEATURE_BMI and >> FEATURE_BMI2. >> (get_available_features): Detect FEATURE_BMI and FEATURE_BMI2. >> >> testsuite/ChangeLog: >> >> * gcc.target/i386/funcspec-5.c: Test new multiversion targets. >> * g++.dg/ext/mv17.C: Test BMI/BMI2 multiversion dispatcher. >> > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index 9ec40cb..441911d 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -34289,15 +34289,18 @@ get_builtin_code_for_version (tree decl, tree > *predica > te_list) > P_PROC_SSE4_A, > P_SSE4_1, > P_SSE4_2, > - P_PROC_SSE4_2, > P_POPCNT, > + P_PROC_SSE4_2, > P_AVX, > P_PROC_AVX, > + P_BMI, > + P_PROC_BMI, > P_FMA4, > P_XOP, > P_PROC_XOP, > P_FMA, > P_PROC_FMA, > + P_BMI2, > P_AVX2, > P_PROC_AVX2, > P_AVX512F, > > This changed the priority of P_POPCNT and caused > > FAIL: g++.dg/ext/mv1.C -std=gnu++98 execution test > FAIL: g++.dg/ext/mv1.C -std=gnu++11 execution test > FAIL: g++.dg/ext/mv1.C -std=gnu++14 execution test > > on Nehalem and Westmere machines: > > mv1.exe: /export/gnu/import/git/sources/gcc/gcc/testsuite/g++.dg/ext/mv1.C:51: > int main(): Assertion `val == 5' failed. > > since "val" is 6 now.
I opened: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64806 -- H.J.