From 0dfc8e1837e3e3ac06ab8c08fdc08b15e0ae1c2d Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sun, 21 Jun 2020 20:20:04 -0700 Subject: [PATCH] [X86] Remove encoding value from the X86_FEATURE and X86_FEATURE_COMPAT macro. NFCI This was orignally done so we could separate the compatibility values and the llvm internal only features into a separate entries in the feature array. This was needed when we explicitly had to convert the feature into the proper 32-bit chunk at every reference and we didn't want things moving around. Now everything is in an array and we have helper funtions or macros to convert encoding to index. So we renumbering is no longer an issue. --- clang/lib/Basic/Targets/X86.cpp | 4 +- clang/lib/CodeGen/CGBuiltin.cpp | 2 +- llvm/include/llvm/Support/X86TargetParser.def | 91 ++++++++++--------- llvm/include/llvm/Support/X86TargetParser.h | 4 +- 4 files changed, 51 insertions(+), 50 deletions(-) diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index 0092c52b2b23..a0eaf6d1faab 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -1518,14 +1518,14 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const { // X86TargetInfo::hasFeature for a somewhat comprehensive list). bool X86TargetInfo::validateCpuSupports(StringRef FeatureStr) const { return llvm::StringSwitch(FeatureStr) -#define X86_FEATURE_COMPAT(VAL, ENUM, STR) .Case(STR, true) +#define X86_FEATURE_COMPAT(ENUM, STR) .Case(STR, true) #include "llvm/Support/X86TargetParser.def" .Default(false); } static llvm::X86::ProcessorFeatures getFeature(StringRef Name) { return llvm::StringSwitch(Name) -#define X86_FEATURE_COMPAT(VAL, ENUM, STR) .Case(STR, llvm::X86::ENUM) +#define X86_FEATURE_COMPAT(ENUM, STR) .Case(STR, llvm::X86::ENUM) #include "llvm/Support/X86TargetParser.def" ; // Note, this function should only be used after ensuring the value is diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 8213ed8a39e1..32e43c295d23 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -11662,7 +11662,7 @@ CodeGenFunction::GetX86CpuSupportsMask(ArrayRef FeatureStrs) { for (const StringRef &FeatureStr : FeatureStrs) { unsigned Feature = StringSwitch(FeatureStr) -#define X86_FEATURE_COMPAT(VAL, ENUM, STR) .Case(STR, VAL) +#define X86_FEATURE_COMPAT(ENUM, STR) .Case(STR, llvm::X86::ENUM) #include "llvm/Support/X86TargetParser.def" ; FeaturesMask |= (1ULL << Feature); diff --git a/llvm/include/llvm/Support/X86TargetParser.def b/llvm/include/llvm/Support/X86TargetParser.def index 3c2614b33bf3..e228cef760bc 100644 --- a/llvm/include/llvm/Support/X86TargetParser.def +++ b/llvm/include/llvm/Support/X86TargetParser.def @@ -125,56 +125,57 @@ X86_CPU_SUBTYPE ("geode", AMDPENTIUM_GEODE) // This macro is used for cpu types present in compiler-rt/libgcc. #ifndef X86_FEATURE_COMPAT -#define X86_FEATURE_COMPAT(VAL, ENUM, STR) X86_FEATURE(VAL, ENUM) +#define X86_FEATURE_COMPAT(ENUM, STR) X86_FEATURE(ENUM) #endif #ifndef X86_FEATURE -#define X86_FEATURE(VAL, ENUM) +#define X86_FEATURE(ENUM) #endif -X86_FEATURE_COMPAT( 0, FEATURE_CMOV, "cmov") -X86_FEATURE_COMPAT( 1, FEATURE_MMX, "mmx") -X86_FEATURE_COMPAT( 2, FEATURE_POPCNT, "popcnt") -X86_FEATURE_COMPAT( 3, FEATURE_SSE, "sse") -X86_FEATURE_COMPAT( 4, FEATURE_SSE2, "sse2") -X86_FEATURE_COMPAT( 5, FEATURE_SSE3, "sse3") -X86_FEATURE_COMPAT( 6, FEATURE_SSSE3, "ssse3") -X86_FEATURE_COMPAT( 7, FEATURE_SSE4_1, "sse4.1") -X86_FEATURE_COMPAT( 8, FEATURE_SSE4_2, "sse4.2") -X86_FEATURE_COMPAT( 9, FEATURE_AVX, "avx") -X86_FEATURE_COMPAT(10, FEATURE_AVX2, "avx2") -X86_FEATURE_COMPAT(11, FEATURE_SSE4_A, "sse4a") -X86_FEATURE_COMPAT(12, FEATURE_FMA4, "fma4") -X86_FEATURE_COMPAT(13, FEATURE_XOP, "xop") -X86_FEATURE_COMPAT(14, FEATURE_FMA, "fma") -X86_FEATURE_COMPAT(15, FEATURE_AVX512F, "avx512f") -X86_FEATURE_COMPAT(16, FEATURE_BMI, "bmi") -X86_FEATURE_COMPAT(17, FEATURE_BMI2, "bmi2") -X86_FEATURE_COMPAT(18, FEATURE_AES, "aes") -X86_FEATURE_COMPAT(19, FEATURE_PCLMUL, "pclmul") -X86_FEATURE_COMPAT(20, FEATURE_AVX512VL, "avx512vl") -X86_FEATURE_COMPAT(21, FEATURE_AVX512BW, "avx512bw") -X86_FEATURE_COMPAT(22, FEATURE_AVX512DQ, "avx512dq") -X86_FEATURE_COMPAT(23, FEATURE_AVX512CD, "avx512cd") -X86_FEATURE_COMPAT(24, FEATURE_AVX512ER, "avx512er") -X86_FEATURE_COMPAT(25, FEATURE_AVX512PF, "avx512pf") -X86_FEATURE_COMPAT(26, FEATURE_AVX512VBMI, "avx512vbmi") -X86_FEATURE_COMPAT(27, FEATURE_AVX512IFMA, "avx512ifma") -X86_FEATURE_COMPAT(28, FEATURE_AVX5124VNNIW, "avx5124vnniw") -X86_FEATURE_COMPAT(29, FEATURE_AVX5124FMAPS, "avx5124fmaps") -X86_FEATURE_COMPAT(30, FEATURE_AVX512VPOPCNTDQ, "avx512vpopcntdq") -X86_FEATURE_COMPAT(31, FEATURE_AVX512VBMI2, "avx512vbmi2") -X86_FEATURE_COMPAT(32, FEATURE_GFNI, "gfni") -X86_FEATURE_COMPAT(33, FEATURE_VPCLMULQDQ, "vpclmulqdq") -X86_FEATURE_COMPAT(34, FEATURE_AVX512VNNI, "avx512vnni") -X86_FEATURE_COMPAT(35, FEATURE_AVX512BITALG, "avx512bitalg") -X86_FEATURE_COMPAT(36, FEATURE_AVX512BF16, "avx512bf16") -X86_FEATURE_COMPAT(37, FEATURE_AVX512VP2INTERSECT, "avx512vp2intersect") + +X86_FEATURE_COMPAT(FEATURE_CMOV, "cmov") +X86_FEATURE_COMPAT(FEATURE_MMX, "mmx") +X86_FEATURE_COMPAT(FEATURE_POPCNT, "popcnt") +X86_FEATURE_COMPAT(FEATURE_SSE, "sse") +X86_FEATURE_COMPAT(FEATURE_SSE2, "sse2") +X86_FEATURE_COMPAT(FEATURE_SSE3, "sse3") +X86_FEATURE_COMPAT(FEATURE_SSSE3, "ssse3") +X86_FEATURE_COMPAT(FEATURE_SSE4_1, "sse4.1") +X86_FEATURE_COMPAT(FEATURE_SSE4_2, "sse4.2") +X86_FEATURE_COMPAT(FEATURE_AVX, "avx") +X86_FEATURE_COMPAT(FEATURE_AVX2, "avx2") +X86_FEATURE_COMPAT(FEATURE_SSE4_A, "sse4a") +X86_FEATURE_COMPAT(FEATURE_FMA4, "fma4") +X86_FEATURE_COMPAT(FEATURE_XOP, "xop") +X86_FEATURE_COMPAT(FEATURE_FMA, "fma") +X86_FEATURE_COMPAT(FEATURE_AVX512F, "avx512f") +X86_FEATURE_COMPAT(FEATURE_BMI, "bmi") +X86_FEATURE_COMPAT(FEATURE_BMI2, "bmi2") +X86_FEATURE_COMPAT(FEATURE_AES, "aes") +X86_FEATURE_COMPAT(FEATURE_PCLMUL, "pclmul") +X86_FEATURE_COMPAT(FEATURE_AVX512VL, "avx512vl") +X86_FEATURE_COMPAT(FEATURE_AVX512BW, "avx512bw") +X86_FEATURE_COMPAT(FEATURE_AVX512DQ, "avx512dq") +X86_FEATURE_COMPAT(FEATURE_AVX512CD, "avx512cd") +X86_FEATURE_COMPAT(FEATURE_AVX512ER, "avx512er") +X86_FEATURE_COMPAT(FEATURE_AVX512PF, "avx512pf") +X86_FEATURE_COMPAT(FEATURE_AVX512VBMI, "avx512vbmi") +X86_FEATURE_COMPAT(FEATURE_AVX512IFMA, "avx512ifma") +X86_FEATURE_COMPAT(FEATURE_AVX5124VNNIW, "avx5124vnniw") +X86_FEATURE_COMPAT(FEATURE_AVX5124FMAPS, "avx5124fmaps") +X86_FEATURE_COMPAT(FEATURE_AVX512VPOPCNTDQ, "avx512vpopcntdq") +X86_FEATURE_COMPAT(FEATURE_AVX512VBMI2, "avx512vbmi2") +X86_FEATURE_COMPAT(FEATURE_GFNI, "gfni") +X86_FEATURE_COMPAT(FEATURE_VPCLMULQDQ, "vpclmulqdq") +X86_FEATURE_COMPAT(FEATURE_AVX512VNNI, "avx512vnni") +X86_FEATURE_COMPAT(FEATURE_AVX512BITALG, "avx512bitalg") +X86_FEATURE_COMPAT(FEATURE_AVX512BF16, "avx512bf16") +X86_FEATURE_COMPAT(FEATURE_AVX512VP2INTERSECT, "avx512vp2intersect") // Features below here are not in libgcc/compiler-rt. -X86_FEATURE (64, FEATURE_MOVBE) -X86_FEATURE (65, FEATURE_ADX) -X86_FEATURE (66, FEATURE_EM64T) -X86_FEATURE (67, FEATURE_CLFLUSHOPT) -X86_FEATURE (68, FEATURE_SHA) +X86_FEATURE (FEATURE_MOVBE) +X86_FEATURE (FEATURE_ADX) +X86_FEATURE (FEATURE_EM64T) +X86_FEATURE (FEATURE_CLFLUSHOPT) +X86_FEATURE (FEATURE_SHA) #undef X86_FEATURE_COMPAT #undef X86_FEATURE diff --git a/llvm/include/llvm/Support/X86TargetParser.h b/llvm/include/llvm/Support/X86TargetParser.h index e357d11a6615..79cb0af4ed06 100644 --- a/llvm/include/llvm/Support/X86TargetParser.h +++ b/llvm/include/llvm/Support/X86TargetParser.h @@ -53,8 +53,8 @@ enum ProcessorSubtypes : unsigned { // This should be kept in sync with libcc/compiler-rt as it should be used // by clang as a proxy for what's in libgcc/compiler-rt. enum ProcessorFeatures { -#define X86_FEATURE(VAL, ENUM) \ - ENUM = VAL, +#define X86_FEATURE(ENUM) \ + ENUM, #include "llvm/Support/X86TargetParser.def" CPU_FEATURE_MAX };