[llvm] 5ac144f - [X86] Calculate the needed size of the feature arrays in _cpu_indicator_init and getHostCPUName using the size of the feature enum.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 22 12:27:40 PDT 2020
I've reverted it. I'm not sure why that didn't fail in my local build.
~Craig
On Mon, Jun 22, 2020 at 12:13 PM Hans Wennborg via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> This seems to be breaking the build:
> http://45.33.8.238/linux/20972/step_4.txt
>
> On Mon, Jun 22, 2020 at 9:07 PM Craig Topper via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> >
> >
> > Author: Craig Topper
> > Date: 2020-06-22T11:46:20-07:00
> > New Revision: 5ac144fe64c6911b5b6011cac1d61e0f82562e7f
> >
> > URL:
> https://github.com/llvm/llvm-project/commit/5ac144fe64c6911b5b6011cac1d61e0f82562e7f
> > DIFF:
> https://github.com/llvm/llvm-project/commit/5ac144fe64c6911b5b6011cac1d61e0f82562e7f.diff
> >
> > LOG: [X86] Calculate the needed size of the feature arrays in
> _cpu_indicator_init and getHostCPUName using the size of the feature enum.
> >
> > Move 0 initialization up to the caller so we don't need to know
> > the size.
> >
> > Added:
> >
> >
> > Modified:
> > compiler-rt/lib/builtins/cpu_model.c
> > llvm/include/llvm/Support/X86TargetParser.h
> > llvm/lib/Support/Host.cpp
> >
> > Removed:
> >
> >
> >
> >
> ################################################################################
> > diff --git a/compiler-rt/lib/builtins/cpu_model.c
> b/compiler-rt/lib/builtins/cpu_model.c
> > index 59c6974207c7..3207f1449e00 100644
> > --- a/compiler-rt/lib/builtins/cpu_model.c
> > +++ b/compiler-rt/lib/builtins/cpu_model.c
> > @@ -125,7 +125,8 @@ enum ProcessorFeatures {
> > FEATURE_AVX512VNNI,
> > FEATURE_AVX512BITALG,
> > FEATURE_AVX512BF16,
> > - FEATURE_AVX512VP2INTERSECT
> > + FEATURE_AVX512VP2INTERSECT,
> > + CPU_FEATURE_MAX
> > };
> >
> > // The check below for i386 was copied from clang's cpuid.h
> (__get_cpuid_max).
> > @@ -493,8 +494,6 @@ static void getAMDProcessorTypeAndSubtype(unsigned
> Family, unsigned Model,
> >
> > static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned
> MaxLeaf,
> > unsigned *Features) {
> > - Features[0] = 0;
> > - Features[1] = 0;
> > unsigned EAX, EBX;
> >
> > #define setFeature(F)
> \
> > @@ -653,7 +652,8 @@ int CONSTRUCTOR_ATTRIBUTE __cpu_indicator_init(void)
> {
> > unsigned MaxLeaf = 5;
> > unsigned Vendor;
> > unsigned Model, Family;
> > - unsigned Features[2];
> > + const unsigned SIZE_OF_FEATURES = (CPU_FEATURE_MAX + 31) / 32;
> > + unsigned Features[SIZE_OF_FEATURES] = {0};
> >
> > // This function needs to run just once.
> > if (__cpu_model.__cpu_vendor)
> > @@ -670,6 +670,8 @@ int CONSTRUCTOR_ATTRIBUTE __cpu_indicator_init(void)
> {
> >
> > // Find available features.
> > getAvailableFeatures(ECX, EDX, MaxLeaf, &Features[0]);
> > +
> > + assert(SIZE_OF_FEATURES == 2);
> > __cpu_model.__cpu_features[0] = Features[0];
> > __cpu_features2 = Features[1];
> >
> >
> > diff --git a/llvm/include/llvm/Support/X86TargetParser.h
> b/llvm/include/llvm/Support/X86TargetParser.h
> > index 7cdf1c532814..e357d11a6615 100644
> > --- a/llvm/include/llvm/Support/X86TargetParser.h
> > +++ b/llvm/include/llvm/Support/X86TargetParser.h
> > @@ -56,7 +56,7 @@ enum ProcessorFeatures {
> > #define X86_FEATURE(VAL, ENUM) \
> > ENUM = VAL,
> > #include "llvm/Support/X86TargetParser.def"
> > -
> > + CPU_FEATURE_MAX
> > };
> >
> > enum CPUKind {
> >
> > diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp
> > index c6b12e6516a4..e4c6b879884a 100644
> > --- a/llvm/lib/Support/Host.cpp
> > +++ b/llvm/lib/Support/Host.cpp
> > @@ -582,7 +582,7 @@ static void detectX86FamilyModel(unsigned EAX,
> unsigned *Family,
> >
> > static void
> > getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model,
> > - const unsigned (&Features)[3],
> > + const unsigned *Features,
> > unsigned *Type, unsigned *Subtype) {
> > auto testFeature = [&](unsigned F) {
> > return (Features[F / 32] & (1U << (F % 32))) != 0;
> > @@ -910,7 +910,7 @@ getIntelProcessorTypeAndSubtype(unsigned Family,
> unsigned Model,
> > }
> >
> > static void getAMDProcessorTypeAndSubtype(unsigned Family, unsigned
> Model,
> > - const unsigned (&Features)[3],
> > + const unsigned *Features,
> > unsigned *Type, unsigned
> *Subtype) {
> > auto testFeature = [&](unsigned F) {
> > return (Features[F / 32] & (1U << (F % 32))) != 0;
> > @@ -1012,10 +1012,7 @@ static void
> getAMDProcessorTypeAndSubtype(unsigned Family, unsigned Model,
> > }
> >
> > static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned
> MaxLeaf,
> > - unsigned (&Features)[3]) {
> > - Features[0] = 0;
> > - Features[1] = 0;
> > - Features[2] = 0;
> > + unsigned *Features) {
> > unsigned EAX, EBX;
> >
> > auto setFeature = [&](unsigned F) {
> > @@ -1157,7 +1154,7 @@ StringRef sys::getHostCPUName() {
> > getX86CpuIDAndInfo(0x1, &EAX, &EBX, &ECX, &EDX);
> >
> > unsigned Family = 0, Model = 0;
> > - unsigned Features[3] = {0, 0, 0};
> > + unsigned Features[(X86::CPU_FEATURE_MAX + 31) / 32] = {0};
> > detectX86FamilyModel(EAX, &Family, &Model);
> > getAvailableFeatures(ECX, EDX, MaxLeaf, Features);
> >
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200622/505b49a8/attachment.html>
More information about the llvm-commits
mailing list