Go to the documentation of this file.
26 static constexpr
unsigned NUM_FEATURE_WORDS =
46 Bits[
I / 32] = NewBits;
50 constexpr
bool operator[](
unsigned I)
const {
98 if (
Bits[
I] != RHS.Bits[
I])
118 #define X86_FEATURE(ENUM, STRING) \
119 constexpr FeatureBitset Feature##ENUM = {X86::FEATURE_##ENUM};
120 #include "llvm/Support/X86TargetParser.def"
124 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX;
128 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX | FeatureFXSR;
140 FeaturePOPCNT | FeatureSSE4_2 |
144 FeatureFMA | FeatureLZCNT | FeatureMOVBE | FeatureXSAVE;
146 FeatureAVX512BW | FeatureAVX512CD |
147 FeatureAVX512DQ | FeatureAVX512VL;
162 FeatureINVPCID | FeatureLZCNT | FeatureMOVBE;
170 FeatureAVX512ER | FeatureAVX512PF | FeaturePREFETCHWT1;
176 FeatureXSAVES | FeatureSGX;
181 FeatureAVX512DQ | FeatureAVX512BW | FeatureAVX512VL | FeatureCLWB |
191 FeatureAVX512BW | FeatureAVX512VL | FeatureAVX512IFMA | FeatureAVX512VBMI |
192 FeaturePKU | FeatureSHA;
195 FeatureAVX512VNNI | FeatureAVX512VPOPCNTDQ | FeatureCLWB | FeatureGFNI |
196 FeatureRDPID | FeatureVAES | FeatureVPCLMULQDQ;
201 FeatureMOVDIRI | FeatureSHSTK | FeatureKL | FeatureWIDEKL;
204 FeatureAVX512BF16 | FeatureAVX512VP2INTERSECT | FeatureCLDEMOTE |
205 FeatureENQCMD | FeatureMOVDIR64B | FeatureMOVDIRI | FeaturePTWRITE |
206 FeatureSERIALIZE | FeatureSHSTK | FeatureTSXLDTRK | FeatureUINTR |
207 FeatureWAITPKG | FeatureAVXVNNI;
210 FeatureSERIALIZE | FeatureWAITPKG | FeatureAVXVNNI;
220 FeatureRDSEED | FeatureSHA | FeatureXSAVE | FeatureXSAVEC |
221 FeatureXSAVEOPT | FeatureXSAVES;
229 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX | Feature3DNOW | Feature3DNOWA;
236 FeatureX87 | FeatureCMPXCHG8B | FeatureMMX | Feature3DNOW | Feature3DNOWA;
243 FeaturesK8SSE3 | FeatureCMPXCHG16B | FeatureLZCNT | FeaturePOPCNT |
244 FeaturePRFCHW | FeatureSAHF | FeatureSSE4_A;
248 FeatureX87 | FeatureCMPXCHG8B | FeatureCMPXCHG16B | Feature64BIT |
249 FeatureFXSR | FeatureLZCNT | FeatureMMX | FeaturePOPCNT | FeaturePRFCHW |
250 FeatureSSE | FeatureSSE2 | FeatureSSE3 | FeatureSSSE3 | FeatureSSE4_A |
253 FeaturesBTVER1 | FeatureAES | FeatureAVX | FeatureBMI | FeatureF16C |
254 FeatureMOVBE | FeaturePCLMUL | FeatureXSAVE | FeatureXSAVEOPT;
258 FeatureX87 | FeatureAES | FeatureAVX | FeatureCMPXCHG8B |
259 FeatureCMPXCHG16B | Feature64BIT | FeatureFMA4 | FeatureFXSR | FeatureLWP |
260 FeatureLZCNT | FeatureMMX | FeaturePCLMUL | FeaturePOPCNT | FeaturePRFCHW |
261 FeatureSAHF | FeatureSSE | FeatureSSE2 | FeatureSSE3 | FeatureSSSE3 |
262 FeatureSSE4_1 | FeatureSSE4_2 | FeatureSSE4_A | FeatureXOP | FeatureXSAVE;
264 FeaturesBDVER1 | FeatureBMI | FeatureFMA | FeatureF16C | FeatureTBM;
268 FeatureBMI2 | FeatureMOVBE |
269 FeatureMWAITX | FeatureRDRND;
273 FeatureX87 | FeatureADX | FeatureAES | FeatureAVX | FeatureAVX2 |
274 FeatureBMI | FeatureBMI2 | FeatureCLFLUSHOPT | FeatureCLZERO |
275 FeatureCMPXCHG8B | FeatureCMPXCHG16B | Feature64BIT | FeatureF16C |
276 FeatureFMA | FeatureFSGSBASE | FeatureFXSR | FeatureLZCNT | FeatureMMX |
277 FeatureMOVBE | FeatureMWAITX | FeaturePCLMUL | FeaturePOPCNT |
278 FeaturePRFCHW | FeatureRDRND | FeatureRDSEED | FeatureSAHF | FeatureSHA |
279 FeatureSSE | FeatureSSE2 | FeatureSSE3 | FeatureSSSE3 | FeatureSSE4_1 |
280 FeatureSSE4_2 | FeatureSSE4_A | FeatureXSAVE | FeatureXSAVEC |
281 FeatureXSAVEOPT | FeatureXSAVES;
285 FeatureINVPCID | FeaturePKU |
286 FeatureVAES | FeatureVPCLMULQDQ;
290 { {
""},
CK_None, ~0U, FeatureX87 | FeatureCMPXCHG8B },
292 { {
"i386"},
CK_i386, ~0U, FeatureX87 },
294 { {
"i486"},
CK_i486, ~0U, FeatureX87 },
299 { {
"i586"},
CK_i586, ~0U, FeatureX87 | FeatureCMPXCHG8B },
300 { {
"pentium"},
CK_Pentium, ~0U, FeatureX87 | FeatureCMPXCHG8B },
303 { {
"pentiumpro"},
CK_PentiumPro, ~0U, FeatureX87 | FeatureCMPXCHG8B },
304 { {
"i686"},
CK_i686, ~0U, FeatureX87 | FeatureCMPXCHG8B },
369 { {
"lakemont"},
CK_Lakemont, ~0U, FeatureCMPXCHG8B },
411 constexpr
const char *
NoTuneList[] = {
"x86-64-v2",
"x86-64-v3",
"x86-64-v4"};
415 if (
P.Name == CPU && (
P.Features[FEATURE_64BIT] || !Only64Bit))
430 if (!
P.Name.empty() && (
P.Features[FEATURE_64BIT] || !Only64Bit))
437 if (!
P.Name.empty() && (
P.Features[FEATURE_64BIT] || !Only64Bit) &&
446 if (
P.Kind ==
Kind) {
447 assert(
P.KeyFeature != ~0U &&
"Processor does not have a key feature.");
528 FeatureAVX2 | FeatureF16C | FeatureFMA;
581 #define X86_FEATURE(ENUM, STR) {{STR}, ImpliedFeatures##ENUM},
582 #include "llvm/Support/X86TargetParser.def"
588 [&](
const ProcInfo &
P) {
return P.Name == CPU; });
595 Bits &= ~Feature64BIT;
616 }
while (Prev !=
Bits);
631 }
while (Prev !=
Bits);
638 FeatureInfos, [&](
const FeatureInfo &FI) {
return FI.Name == Feature; });
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 class represents lattice values for constants.
constexpr FeatureBitset ImpliedFeaturesWBNOINVD
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
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
constexpr FeatureBitset FeaturesCore2
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
constexpr FeatureBitset ImpliedFeaturesXSAVES
constexpr FeatureBitset ImpliedFeaturesMOVDIRI
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.
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
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
constexpr FeatureBitset FeaturesZNVER1
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 ImpliedFeaturesAVX512ER
constexpr FeatureBitset ImpliedFeaturesXSAVEC
constexpr FeatureBitset ImpliedFeaturesFSGSBASE
constexpr FeatureBitset ImpliedFeaturesXSAVE
constexpr FeatureBitset FeaturesAthlonXP
constexpr FeatureBitset ImpliedFeaturesMMX
constexpr FeatureBitset ImpliedFeaturesVAES
constexpr FeatureBitset ImpliedFeaturesFMA4
constexpr FeatureBitset ImpliedFeaturesLWP
constexpr FeatureBitset ImpliedFeaturesAVX512VNNI
constexpr FeatureBitset FeaturesPentium4
constexpr FeatureBitset FeaturesGeode
constexpr FeatureBitset FeaturesTigerlake
constexpr size_t array_lengthof(T(&)[N])
Find the length of an array.
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
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 FeaturesWestmere
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 ImpliedFeaturesAMX_INT8
constexpr FeatureBitset FeaturesSandyBridge
constexpr FeatureBitset ImpliedFeaturesAVX512VBMI2
constexpr FeatureBitset ImpliedFeaturesAVX512DQ
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