Go to the documentation of this file.
27 static constexpr
unsigned NUM_FEATURE_WORDS =
47 Bits[
I / 32] = NewBits;
51 constexpr
bool operator[](
unsigned I)
const {
119 #define X86_FEATURE(ENUM, STRING) \
120 constexpr FeatureBitset Feature##ENUM = {X86::FEATURE_##ENUM};
121 #include "llvm/TargetParser/X86TargetParser.def"
125 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX;
129 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX | FeatureFXSR;
141 FeaturePOPCNT | FeatureCRC32 |
142 FeatureSSE4_2 | FeatureCMPXCHG16B;
145 FeatureFMA | FeatureLZCNT | FeatureMOVBE | FeatureXSAVE;
147 FeatureAVX512BW | FeatureAVX512CD |
148 FeatureAVX512DQ | FeatureAVX512VL;
163 FeatureINVPCID | FeatureLZCNT | FeatureMOVBE;
171 FeatureAVX512ER | FeatureAVX512PF | FeaturePREFETCHWT1;
177 FeatureXSAVES | FeatureSGX;
182 FeatureAVX512DQ | FeatureAVX512BW | FeatureAVX512VL | FeatureCLWB |
192 FeatureAVX512BW | FeatureAVX512VL | FeatureAVX512IFMA | FeatureAVX512VBMI |
193 FeaturePKU | FeatureSHA;
196 FeatureAVX512VNNI | FeatureAVX512VPOPCNTDQ | FeatureGFNI | FeatureRDPID |
197 FeatureVAES | FeatureVPCLMULQDQ;
203 FeatureCLWB | FeatureMOVDIRI | FeatureSHSTK | FeatureKL | FeatureWIDEKL;
206 FeatureAVX512BF16 | FeatureAVX512FP16 | FeatureAVXVNNI | FeatureCLDEMOTE |
207 FeatureENQCMD | FeatureMOVDIR64B | FeatureMOVDIRI | FeaturePTWRITE |
208 FeatureSERIALIZE | FeatureSHSTK | FeatureTSXLDTRK | FeatureUINTR |
221 FeatureRDSEED | FeatureSHA | FeatureXSAVE | FeatureXSAVEC |
222 FeatureXSAVEOPT | FeatureXSAVES;
228 FeaturesTremont | FeatureADX | FeatureBMI | FeatureBMI2 | FeatureF16C |
229 FeatureFMA | FeatureINVPCID | FeatureLZCNT | FeaturePCONFIG | FeaturePKU |
230 FeatureSERIALIZE | FeatureSHSTK | FeatureVAES | FeatureVPCLMULQDQ |
231 FeatureCLDEMOTE | FeatureMOVDIR64B | FeatureMOVDIRI | FeatureWAITPKG |
232 FeatureAVXVNNI | FeatureHRESET | FeatureWIDEKL;
235 FeatureAVXNECONVERT | FeatureAVXVNNIINT8;
241 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX | Feature3DNOW | Feature3DNOWA;
248 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX | Feature3DNOW | Feature3DNOWA;
255 FeaturesK8SSE3 | FeatureCMPXCHG16B | FeatureLZCNT | FeaturePOPCNT |
256 FeaturePRFCHW | FeatureSAHF | FeatureSSE4_A;
260 FeatureX87 | FeatureCMPXCHG8B | FeatureCMPXCHG16B | Feature64BIT |
261 FeatureFXSR | FeatureLZCNT | FeatureMMX | FeaturePOPCNT | FeaturePRFCHW |
262 FeatureSSE | FeatureSSE2 | FeatureSSE3 | FeatureSSSE3 | FeatureSSE4_A |
265 FeaturesBTVER1 | FeatureAES | FeatureAVX | FeatureBMI | FeatureCRC32 |
266 FeatureF16C | FeatureMOVBE | FeaturePCLMUL | FeatureXSAVE | FeatureXSAVEOPT;
270 FeatureX87 | FeatureAES | FeatureAVX | FeatureCMPXCHG8B |
271 FeatureCMPXCHG16B | FeatureCRC32 | Feature64BIT | FeatureFMA4 |
272 FeatureFXSR | FeatureLWP | FeatureLZCNT | FeatureMMX | FeaturePCLMUL |
273 FeaturePOPCNT | FeaturePRFCHW | FeatureSAHF | FeatureSSE | FeatureSSE2 |
274 FeatureSSE3 | FeatureSSSE3 | FeatureSSE4_1 | FeatureSSE4_2 | FeatureSSE4_A |
275 FeatureXOP | FeatureXSAVE;
277 FeaturesBDVER1 | FeatureBMI | FeatureFMA | FeatureF16C | FeatureTBM;
281 FeatureBMI2 | FeatureMOVBE |
282 FeatureMWAITX | FeatureRDRND;
286 FeatureX87 | FeatureADX | FeatureAES | FeatureAVX | FeatureAVX2 |
287 FeatureBMI | FeatureBMI2 | FeatureCLFLUSHOPT | FeatureCLZERO |
288 FeatureCMPXCHG8B | FeatureCMPXCHG16B | FeatureCRC32 | Feature64BIT |
289 FeatureF16C | FeatureFMA | FeatureFSGSBASE | FeatureFXSR | FeatureLZCNT |
290 FeatureMMX | FeatureMOVBE | FeatureMWAITX | FeaturePCLMUL | FeaturePOPCNT |
291 FeaturePRFCHW | FeatureRDRND | FeatureRDSEED | FeatureSAHF | FeatureSHA |
292 FeatureSSE | FeatureSSE2 | FeatureSSE3 | FeatureSSSE3 | FeatureSSE4_1 |
293 FeatureSSE4_2 | FeatureSSE4_A | FeatureXSAVE | FeatureXSAVEC |
294 FeatureXSAVEOPT | FeatureXSAVES;
296 FeatureRDPID | FeatureRDPRU |
299 FeatureINVPCID | FeaturePKU |
300 FeatureVAES | FeatureVPCLMULQDQ;
302 FeaturesZNVER3 | FeatureAVX512F | FeatureAVX512CD | FeatureAVX512DQ |
303 FeatureAVX512BW | FeatureAVX512VL | FeatureAVX512IFMA | FeatureAVX512VBMI |
304 FeatureAVX512VBMI2 | FeatureAVX512VNNI | FeatureAVX512BITALG |
305 FeatureAVX512VPOPCNTDQ | FeatureAVX512BF16 | FeatureGFNI |
310 { {
""},
CK_None, ~0U, FeatureX87 | FeatureCMPXCHG8B },
312 { {
"i386"},
CK_i386, ~0U, FeatureX87 },
314 { {
"i486"},
CK_i486, ~0U, FeatureX87 },
319 { {
"i586"},
CK_i586, ~0U, FeatureX87 | FeatureCMPXCHG8B },
320 { {
"pentium"},
CK_Pentium, ~0U, FeatureX87 | FeatureCMPXCHG8B },
323 { {
"pentiumpro"},
CK_PentiumPro, ~0U, FeatureX87 | FeatureCMPXCHG8B },
324 { {
"i686"},
CK_i686, ~0U, FeatureX87 | FeatureCMPXCHG8B },
403 { {
"lakemont"},
CK_Lakemont, ~0U, FeatureCMPXCHG8B },
446 constexpr
const char *
NoTuneList[] = {
"x86-64-v2",
"x86-64-v3",
"x86-64-v4"};
450 if (
P.Name == CPU && (
P.Features[FEATURE_64BIT] || !Only64Bit))
465 if (!
P.Name.empty() && (
P.Features[FEATURE_64BIT] || !Only64Bit))
472 if (!
P.Name.empty() && (
P.Features[FEATURE_64BIT] || !Only64Bit) &&
481 if (
P.Kind == Kind) {
482 assert(
P.KeyFeature != ~0U &&
"Processor does not have a key feature.");
565 FeatureAVX2 | FeatureF16C | FeatureFMA;
618 FeatureAVX512BW | FeatureAVX512DQ | FeatureAVX512VL;
627 #define X86_FEATURE(ENUM, STR) {{STR}, ImpliedFeatures##ENUM},
628 #include "llvm/TargetParser/X86TargetParser.def"
634 [&](
const ProcInfo &
P) {
return P.Name == CPU; });
641 Bits &= ~Feature64BIT;
662 }
while (Prev !=
Bits);
677 }
while (Prev !=
Bits);
684 FeatureInfos, [&](
const FeatureInfo &FI) {
return FI.Name == Feature; });
707 for (
const StringRef &FeatureStr : FeatureStrs) {
709 #define X86_FEATURE_COMPAT(ENUM, STR, PRIORITY) \
710 .Case(STR, llvm::X86::FEATURE_##ENUM)
711 #include "llvm/TargetParser/X86TargetParser.def"
713 FeaturesMask |= (1ULL << Feature);
723 #define X86_FEATURE_COMPAT(ENUM, STR, PRIORITY) PRIORITY,
724 unsigned Priorities[] = {
725 #include "llvm/TargetParser/X86TargetParser.def"
728 std::array<unsigned,
std::size(Priorities) - 1> HelperList;
729 std::iota(HelperList.begin(), HelperList.end(), 0);
730 assert(std::is_permutation(HelperList.begin(), HelperList.end(),
733 "Priorities don't form consecutive range!");
737 #define X86_FEATURE_COMPAT(ENUM, STR, PRIORITY) \
738 case X86::FEATURE_##ENUM: \
740 #include "llvm/TargetParser/X86TargetParser.def"
constexpr FeatureBitset FeaturesBonnell
We currently generate a but we really shouldn eax ecx xorl edx divl ecx eax divl ecx movl eax ret A similar code sequence works for division We currently compile i32 v2 eax eax jo LBB1_2 atomic and others It is also currently not done for read modify write instructions It is also current not done if the OF or CF flags are needed The shift operators have the complication that when the shift count is EFLAGS is not set
static constexpr FeatureBitset FeaturesZNVER3
constexpr FeatureBitset ImpliedFeaturesUINTR
constexpr FeatureBitset ImpliedFeaturesCLZERO
constexpr FeatureBitset ImpliedFeaturesMOVDIR64B
constexpr FeatureBitset FeaturesIvyBridge
This is an optimization pass for GlobalISel generic memory operations.
constexpr FeatureBitset ImpliedFeaturesWBNOINVD
constexpr FeatureBitset ImpliedFeaturesAVXNECONVERT
constexpr FeatureBitset FeaturesGraniteRapids
constexpr FeatureBitset ImpliedFeaturesMOVBE
constexpr FeatureBitset FeaturesPentium3
constexpr FeatureBitset FeaturesPentium2
constexpr FeatureBitset ImpliedFeaturesSHA
constexpr FeatureBitset ImpliedFeaturesAVX512CD
constexpr FeatureBitset FeaturesICLServer
constexpr FeatureBitset ImpliedFeaturesTSXLDTRK
constexpr FeatureBitset ImpliedFeaturesLZCNT
constexpr FeatureBitset FeaturesBroadwell
constexpr FeatureBitset ImpliedFeaturesAVX512FP16
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
constexpr FeatureBitset ImpliedFeaturesAVXVNNI
constexpr FeatureBitset FeaturesPenryn
constexpr FeatureBitset FeaturesAthlon
constexpr FeatureBitset ImpliedFeaturesGFNI
static void getImpliedDisabledFeatures(FeatureBitset &Bits, unsigned Value)
Create bit vector of features that are implied disabled if the feature passed in Value is disabled.
static void getImpliedEnabledFeatures(FeatureBitset &Bits, const FeatureBitset &Implies)
constexpr FeatureBitset ImpliedFeaturesCMPXCHG16B
constexpr FeatureBitset ImpliedFeaturesMWAITX
constexpr FeatureBitset FeaturesBDVER3
constexpr FeatureBitset ImpliedFeaturesAES
constexpr FeatureBitset FeaturesNehalem
constexpr FeatureBitset ImpliedFeatures64BIT
Define some predicates that are used for node matching.
constexpr FeatureBitset ImpliedFeaturesRDRND
static constexpr FeatureBitset FeaturesZNVER4
constexpr FeatureBitset FeaturesCore2
uint64_t getCpuSupportsMask(ArrayRef< StringRef > FeatureStrs)
constexpr FeatureBitset ImpliedFeaturesBMI
const_iterator end(StringRef path)
Get end iterator over path.
const_iterator begin(StringRef path, Style style=Style::native)
Get begin iterator over path.
ProcessorFeatures getKeyFeature(CPUKind Kind)
Get the key feature prioritizing target multiversioning.
bool operator!=(uint64_t V1, const APInt &V2)
Container class for subtarget features.
constexpr FeatureBitset FeaturesK8
constexpr FeatureBitset ImpliedFeaturesXSAVEOPT
Expected< ExpressionValue > max(const ExpressionValue &Lhs, const ExpressionValue &Rhs)
constexpr FeatureBitset ImpliedFeaturesXSAVES
constexpr FeatureBitset ImpliedFeaturesRAOINT
constexpr FeatureBitset ImpliedFeaturesCMPCCXADD
constexpr FeatureBitset ImpliedFeaturesMOVDIRI
constexpr FeatureBitset FeaturesNocona
Predicate any(Predicate P0, Predicate P1)
True iff P0 or P1 are true.
constexpr FeatureBitset ImpliedFeaturesAVX512VPOPCNTDQ
constexpr FeatureBitset FeaturesK6
constexpr FeatureBitset ImpliedFeaturesVZEROUPPER
constexpr FeatureBitset ImpliedFeaturesAVX512BW
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
bool operator&=(SparseBitVector< ElementSize > *LHS, const SparseBitVector< ElementSize > &RHS)
A wrapper around a string literal that serves as a proxy for constructing global tables of StringRefs...
CPUKind parseArchX86(StringRef CPU, bool Only64Bit=false)
Parse CPU string into a CPUKind.
constexpr FeatureBitset ImpliedFeaturesXOP
constexpr FeatureBitset ImpliedFeaturesF16C
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
constexpr FeatureBitset ImpliedFeaturesAVX512BF16
unsigned getFeaturePriority(ProcessorFeatures Feat)
constexpr FeatureBitset FeaturesZNVER1
constexpr FeatureBitset ImpliedFeaturesCRC32
void fillValidCPUArchList(SmallVectorImpl< StringRef > &Values, bool Only64Bit=false)
Provide a list of valid CPU names.
constexpr FeatureBitset FeaturesPentiumMMX
constexpr FeatureBitset ImpliedFeaturesSSE2
constexpr FeatureBitset FeaturesICLClient
constexpr FeatureBitset FeaturesX86_64_V3
constexpr FeatureBitset ImpliedFeaturesINVPCID
constexpr FeatureBitset ImpliedFeatures3DNOW
constexpr FeatureBitset FeaturesRocketlake
constexpr FeatureBitset ImpliedFeaturesAVX512ER
constexpr FeatureBitset ImpliedFeaturesXSAVEC
constexpr FeatureBitset ImpliedFeaturesFSGSBASE
constexpr FeatureBitset ImpliedFeaturesXSAVE
constexpr FeatureBitset FeaturesAthlonXP
constexpr FeatureBitset ImpliedFeaturesMMX
constexpr FeatureBitset ImpliedFeaturesVAES
constexpr FeatureBitset ImpliedFeaturesFMA4
constexpr FeatureBitset FeaturesGrandridge
constexpr FeatureBitset ImpliedFeaturesLWP
constexpr FeatureBitset ImpliedFeaturesAVX512VNNI
constexpr FeatureBitset FeaturesPentium4
constexpr FeatureBitset FeaturesSierraforest
constexpr FeatureBitset FeaturesGeode
constexpr FeatureBitset FeaturesTigerlake
constexpr FeatureBitset ImpliedFeaturesENQCMD
constexpr FeatureBitset ImpliedFeaturesPKU
constexpr FeatureBitset FeaturesHaswell
constexpr FeatureBitset FeaturesCooperLake
constexpr FeatureBitset ImpliedFeaturesPTWRITE
constexpr FeatureBitset FeaturesCannonlake
constexpr FeatureBitset ImpliedFeaturesAMX_TILE
constexpr FeatureBitset FeaturesK8SSE3
constexpr FeatureBitset ImpliedFeaturesSSE4_2
constexpr FeatureBitset ImpliedFeaturesSGX
constexpr FeatureBitset ImpliedFeaturesSSE
constexpr FeatureBitset ImpliedFeaturesAVX512F
constexpr FeatureBitset ImpliedFeaturesPCONFIG
constexpr FeatureBitset FeaturesAlderlake
constexpr FeatureBitset ImpliedFeaturesWAITPKG
constexpr FeatureBitset FeaturesX86_64_V2
constexpr FeatureBitset ImpliedFeaturesFMA
APInt operator|(APInt a, const APInt &b)
constexpr FeatureBitset ImpliedFeaturesTBM
constexpr FeatureBitset ImpliedFeaturesPREFETCHWT1
constexpr FeatureBitset ImpliedFeaturesRETPOLINE_INDIRECT_BRANCHES
constexpr FeatureBitset FeaturesBTVER2
constexpr FeatureBitset ImpliedFeaturesAVX512PF
constexpr FeatureBitset ImpliedFeaturesADX
void updateImpliedFeatures(StringRef Feature, bool Enabled, StringMap< bool > &Features)
Set or clear entries in Features that are implied to be enabled/disabled by the provided Feature.
constexpr FeatureBitset FeaturesSapphireRapids
bool is_contained(R &&Range, const E &Element)
Wrapper function around std::find to detect if an element exists in a container.
constexpr FeatureBitset ImpliedFeaturesCLWB
constexpr FeatureBitset ImpliedFeaturesAVX512VL
constexpr FeatureBitset ImpliedFeaturesLVI_CFI
constexpr FeatureBitset FeaturesBDVER4
constexpr FeatureBitset ImpliedFeaturesAVX2
void getFeaturesForCPU(StringRef CPU, SmallVectorImpl< StringRef > &Features)
Fill in the features that CPU supports into Features.
constexpr FeatureBitset ImpliedFeaturesAVX512VP2INTERSECT
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
constexpr FeatureBitset FeaturesGoldmont
constexpr FeatureBitset ImpliedFeaturesSHSTK
constexpr FeatureBitset ImpliedFeaturesFXSR
constexpr FeatureBitset ImpliedFeaturesRTM
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
constexpr FeatureBitset ImpliedFeaturesSSE4_1
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
StringRef - Represent a constant reference to a string, i.e.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
bool operator|=(SparseBitVector< ElementSize > &LHS, const SparseBitVector< ElementSize > *RHS)
constexpr FeatureBitset ImpliedFeaturesAMX_BF16
constexpr FeatureBitset FeaturesSilvermont
constexpr FeatureBitset FeaturesKNM
constexpr FeatureBitset FeaturesBDVER2
constexpr FeatureBitset FeaturesX86_64_V4
constexpr FeatureBitset ImpliedFeaturesVPCLMULQDQ
constexpr FeatureBitset ImpliedFeaturesSSE4_A
constexpr FeatureBitset ImpliedFeaturesRDSEED
auto find_if(R &&Range, UnaryPredicate P)
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.
constexpr FeatureBitset ImpliedFeaturesRETPOLINE_EXTERNAL_THUNK
constexpr FeatureBitset FeaturesGoldmontPlus
APInt operator~(APInt v)
Unary bitwise complement operator.
constexpr FeatureBitset ImpliedFeaturesBMI2
APInt operator&(APInt a, const APInt &b)
constexpr FeatureBitset ImpliedFeaturesSERIALIZE
constexpr FeatureBitset ImpliedFeaturesLVI_LOAD_HARDENING
constexpr FeatureBitset ImpliedFeaturesAVX512IFMA
constexpr FeatureBitset FeaturesPrescott
constexpr FeatureBitset ImpliedFeaturesPRFCHW
constexpr FeatureBitset FeaturesKNL
constexpr ProcInfo Processors[]
constexpr FeatureBitset ImpliedFeaturesAVX
constexpr FeatureBitset FeaturesZNVER2
constexpr FeatureBitset FeaturesSkylakeClient
constexpr FeatureBitset ImpliedFeaturesPREFETCHI
constexpr FeatureBitset FeaturesWestmere
constexpr FeatureBitset ImpliedFeaturesAVXVNNIINT8
constexpr FeatureBitset ImpliedFeaturesCLFLUSHOPT
constexpr FeatureInfo FeatureInfos[X86::CPU_FEATURE_MAX]
constexpr FeatureBitset FeaturesCascadeLake
constexpr FeatureBitset ImpliedFeaturesAVX5124FMAPS
constexpr FeatureBitset ImpliedFeaturesSSE3
constexpr FeatureBitset FeaturesSkylakeServer
void fillValidTuneCPUList(SmallVectorImpl< StringRef > &Values, bool Only64Bit=false)
Provide a list of valid -mtune names.
constexpr FeatureBitset ImpliedFeaturesPOPCNT
constexpr FeatureBitset ImpliedFeaturesKL
CPUKind parseTuneCPU(StringRef CPU, bool Only64Bit=false)
constexpr FeatureBitset ImpliedFeaturesHRESET
constexpr FeatureBitset FeaturesX86_64
constexpr FeatureBitset ImpliedFeaturesCLDEMOTE
constexpr FeatureBitset ImpliedFeaturesX87
constexpr FeatureBitset ImpliedFeaturesSAHF
constexpr const char * NoTuneList[]
constexpr FeatureBitset ImpliedFeaturesRETPOLINE_INDIRECT_CALLS
constexpr FeatureBitset FeaturesAMDFAM10
constexpr FeatureBitset ImpliedFeaturesAVX512VBMI
constexpr FeatureBitset ImpliedFeaturesSSSE3
constexpr FeatureBitset FeaturesTremont
constexpr FeatureBitset ImpliedFeaturesAVX5124VNNIW
constexpr FeatureBitset ImpliedFeaturesAVXIFMA
constexpr FeatureBitset ImpliedFeaturesAMX_INT8
constexpr FeatureBitset ImpliedFeaturesRDPRU
A switch()-like statement whose cases are string literals.
constexpr FeatureBitset FeaturesSandyBridge
constexpr FeatureBitset ImpliedFeaturesAVX512VBMI2
constexpr FeatureBitset ImpliedFeaturesAVX512DQ
constexpr FeatureBitset ImpliedFeaturesAMX_FP16
constexpr FeatureBitset ImpliedFeaturesCMPXCHG8B
LLVM Value Representation.
constexpr FeatureBitset FeaturesBDVER1
constexpr FeatureBitset ImpliedFeaturesWIDEKL
constexpr FeatureBitset ImpliedFeaturesRDPID
constexpr FeatureBitset FeaturesBTVER1
constexpr FeatureBitset ImpliedFeaturesAVX512BITALG
constexpr FeatureBitset ImpliedFeaturesPCLMUL
constexpr FeatureBitset ImpliedFeaturesCMOV
reference emplace_back(ArgTypes &&... Args)
constexpr FeatureBitset ImpliedFeatures3DNOWA