diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86.td | 772 |
1 files changed, 380 insertions, 392 deletions
diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td index b3a9b9591ee..c25235f377e 100644 --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -421,6 +421,17 @@ def FeatureMergeToThreeWayBranch : SubtargetFeature<"merge-to-threeway-branch", "Merge branches to a three-way " "conditional branch">; +// Bonnell +def ProcIntelAtom : SubtargetFeature<"", "X86ProcFamily", "IntelAtom", "">; +// Silvermont +def ProcIntelSLM : SubtargetFeature<"", "X86ProcFamily", "IntelSLM", "">; +// Goldmont +def ProcIntelGLM : SubtargetFeature<"", "X86ProcFamily", "IntelGLM", "">; +// Goldmont Plus +def ProcIntelGLP : SubtargetFeature<"", "X86ProcFamily", "IntelGLP", "">; +// Tremont +def ProcIntelTRM : SubtargetFeature<"", "X86ProcFamily", "IntelTRM", "">; + //===----------------------------------------------------------------------===// // Register File Description //===----------------------------------------------------------------------===// @@ -439,7 +450,7 @@ include "X86SchedPredicates.td" def X86InstrInfo : InstrInfo; //===----------------------------------------------------------------------===// -// X86 processors supported. +// X86 Scheduler Models //===----------------------------------------------------------------------===// include "X86ScheduleAtom.td" @@ -453,16 +464,299 @@ include "X86ScheduleBtVer2.td" include "X86SchedSkylakeClient.td" include "X86SchedSkylakeServer.td" -// Bonnell -def ProcIntelAtom : SubtargetFeature<"", "X86ProcFamily", "IntelAtom", "">; -// Silvermont -def ProcIntelSLM : SubtargetFeature<"", "X86ProcFamily", "IntelSLM", "">; -// Goldmont -def ProcIntelGLM : SubtargetFeature<"", "X86ProcFamily", "IntelGLM", "">; -// Goldmont Plus -def ProcIntelGLP : SubtargetFeature<"", "X86ProcFamily", "IntelGLP", "">; -// Tremont -def ProcIntelTRM : SubtargetFeature<"", "X86ProcFamily", "IntelTRM", "">; +//===----------------------------------------------------------------------===// +// X86 Processor Feature Lists +//===----------------------------------------------------------------------===// + +def ProcessorFeatures { + // Sandybridge + // SSE is not listed here since llvm treats AVX as a reimplementation of SSE, + // rather than a superset. + list<SubtargetFeature> SNBInheritableFeatures = [FeatureX87, + FeatureCMOV, + FeatureMMX, + FeatureAVX, + FeatureFXSR, + FeatureNOPL, + Feature64Bit, + FeatureCMPXCHG16B, + FeaturePOPCNT, + FeatureSlowDivide64, + FeaturePCLMUL, + FeatureXSAVE, + FeatureXSAVEOPT, + FeatureLAHFSAHF, + FeatureSlow3OpsLEA, + FeatureFastScalarFSQRT, + FeatureFastSHLDRotate, + FeatureMergeToThreeWayBranch, + FeatureMacroFusion]; + list<SubtargetFeature> SNBSpecificFeatures = [FeatureSlowUAMem32, + FeaturePOPCNTFalseDeps]; + list<SubtargetFeature> SNBFeatures = + !listconcat(SNBInheritableFeatures, SNBSpecificFeatures); + + // Ivybridge + list<SubtargetFeature> IVBAdditionalFeatures = [FeatureRDRAND, + FeatureF16C, + FeatureFSGSBase]; + list<SubtargetFeature> IVBSpecificFeatures = [FeatureSlowUAMem32, + FeaturePOPCNTFalseDeps]; + list<SubtargetFeature> IVBInheritableFeatures = + !listconcat(SNBInheritableFeatures, IVBAdditionalFeatures); + list<SubtargetFeature> IVBFeatures = + !listconcat(IVBInheritableFeatures, IVBSpecificFeatures); + + // Haswell + list<SubtargetFeature> HSWAdditionalFeatures = [FeatureAVX2, + FeatureBMI, + FeatureBMI2, + FeatureERMSB, + FeatureFMA, + FeatureINVPCID, + FeatureLZCNT, + FeatureMOVBE, + FeatureFastVariableShuffle]; + list<SubtargetFeature> HSWSpecificFeatures = [FeaturePOPCNTFalseDeps, + FeatureLZCNTFalseDeps]; + list<SubtargetFeature> HSWInheritableFeatures = + !listconcat(IVBInheritableFeatures, HSWAdditionalFeatures); + list<SubtargetFeature> HSWFeatures = + !listconcat(HSWInheritableFeatures, HSWSpecificFeatures); + + // Broadwell + list<SubtargetFeature> BDWAdditionalFeatures = [FeatureADX, + FeatureRDSEED, + FeaturePRFCHW]; + list<SubtargetFeature> BDWSpecificFeatures = [FeaturePOPCNTFalseDeps, + FeatureLZCNTFalseDeps]; + list<SubtargetFeature> BDWInheritableFeatures = + !listconcat(HSWInheritableFeatures, BDWAdditionalFeatures); + list<SubtargetFeature> BDWFeatures = + !listconcat(BDWInheritableFeatures, BDWSpecificFeatures); + + // Skylake + list<SubtargetFeature> SKLAdditionalFeatures = [FeatureAES, + FeatureMPX, + FeatureXSAVEC, + FeatureXSAVES, + FeatureCLFLUSHOPT, + FeatureFastVectorFSQRT]; + list<SubtargetFeature> SKLSpecificFeatures = [FeatureHasFastGather, + FeaturePOPCNTFalseDeps, + FeatureSGX]; + list<SubtargetFeature> SKLInheritableFeatures = + !listconcat(BDWInheritableFeatures, SKLAdditionalFeatures); + list<SubtargetFeature> SKLFeatures = + !listconcat(SKLInheritableFeatures, SKLSpecificFeatures); + + // Skylake-AVX512 + list<SubtargetFeature> SKXAdditionalFeatures = [FeatureAVX512, + FeatureCDI, + FeatureDQI, + FeatureBWI, + FeatureVLX, + FeaturePKU, + FeatureCLWB]; + list<SubtargetFeature> SKXSpecificFeatures = [FeatureHasFastGather, + FeaturePOPCNTFalseDeps]; + list<SubtargetFeature> SKXInheritableFeatures = + !listconcat(SKLInheritableFeatures, SKXAdditionalFeatures); + list<SubtargetFeature> SKXFeatures = + !listconcat(SKXInheritableFeatures, SKXSpecificFeatures); + + // Cascadelake + list<SubtargetFeature> CLXAdditionalFeatures = [FeatureVNNI]; + list<SubtargetFeature> CLXSpecificFeatures = [FeatureHasFastGather, + FeaturePOPCNTFalseDeps]; + list<SubtargetFeature> CLXInheritableFeatures = + !listconcat(SKXInheritableFeatures, CLXAdditionalFeatures); + list<SubtargetFeature> CLXFeatures = + !listconcat(CLXInheritableFeatures, CLXSpecificFeatures); + + // Cannonlake + list<SubtargetFeature> CNLAdditionalFeatures = [FeatureAVX512, + FeatureCDI, + FeatureDQI, + FeatureBWI, + FeatureVLX, + FeaturePKU, + FeatureVBMI, + FeatureIFMA, + FeatureSHA, + FeatureSGX]; + list<SubtargetFeature> CNLSpecificFeatures = [FeatureHasFastGather]; + list<SubtargetFeature> CNLInheritableFeatures = + !listconcat(SKLInheritableFeatures, CNLAdditionalFeatures); + list<SubtargetFeature> CNLFeatures = + !listconcat(CNLInheritableFeatures, CNLSpecificFeatures); + + // Icelake + list<SubtargetFeature> ICLAdditionalFeatures = [FeatureBITALG, + FeatureVAES, + FeatureVBMI2, + FeatureVNNI, + FeatureVPCLMULQDQ, + FeatureVPOPCNTDQ, + FeatureGFNI, + FeatureCLWB, + FeatureRDPID]; + list<SubtargetFeature> ICLSpecificFeatures = [FeatureHasFastGather]; + list<SubtargetFeature> ICLInheritableFeatures = + !listconcat(CNLInheritableFeatures, ICLAdditionalFeatures); + list<SubtargetFeature> ICLFeatures = + !listconcat(ICLInheritableFeatures, ICLSpecificFeatures); + + // Icelake Server + list<SubtargetFeature> ICXSpecificFeatures = [FeaturePCONFIG, + FeatureWBNOINVD, + FeatureHasFastGather]; + list<SubtargetFeature> ICXFeatures = + !listconcat(ICLInheritableFeatures, ICXSpecificFeatures); + + // Goldmont + list<SubtargetFeature> GLMInheritableFeatures = [FeatureX87, + FeatureCMOV, + FeatureMMX, + FeatureSSE42, + FeatureFXSR, + FeatureNOPL, + Feature64Bit, + FeatureCMPXCHG16B, + FeatureMOVBE, + FeaturePOPCNT, + FeaturePCLMUL, + FeatureAES, + FeaturePRFCHW, + FeatureSlowTwoMemOps, + FeatureSlowLEA, + FeatureSlowIncDec, + FeatureLAHFSAHF, + FeatureMPX, + FeatureSHA, + FeatureRDRAND, + FeatureRDSEED, + FeatureXSAVE, + FeatureXSAVEOPT, + FeatureXSAVEC, + FeatureXSAVES, + FeatureCLFLUSHOPT, + FeatureFSGSBase]; + list<SubtargetFeature> GLMSpecificFeatures = [ProcIntelGLM, + FeaturePOPCNTFalseDeps]; + list<SubtargetFeature> GLMFeatures = + !listconcat(GLMInheritableFeatures, GLMSpecificFeatures); + + // Goldmont Plus + list<SubtargetFeature> GLPAdditionalFeatures = [FeaturePTWRITE, + FeatureRDPID, + FeatureSGX]; + list<SubtargetFeature> GLPSpecificFeatures = [ProcIntelGLP]; + list<SubtargetFeature> GLPInheritableFeatures = + !listconcat(GLMInheritableFeatures, GLPAdditionalFeatures); + list<SubtargetFeature> GLPFeatures = + !listconcat(GLPInheritableFeatures, GLPSpecificFeatures); + + // Tremont + list<SubtargetFeature> TRMAdditionalFeatures = [FeatureCLDEMOTE, + FeatureGFNI, + FeatureMOVDIRI, + FeatureMOVDIR64B, + FeatureWAITPKG]; + list<SubtargetFeature> TRMSpecificFeatures = [ProcIntelTRM]; + list<SubtargetFeature> TRMFeatures = + !listconcat(GLPInheritableFeatures, TRMAdditionalFeatures, + TRMSpecificFeatures); + + // Knights Landing + list<SubtargetFeature> KNLFeatures = [FeatureX87, + FeatureCMOV, + FeatureMMX, + FeatureFXSR, + FeatureNOPL, + Feature64Bit, + FeatureCMPXCHG16B, + FeaturePOPCNT, + FeatureSlowDivide64, + FeaturePCLMUL, + FeatureXSAVE, + FeatureXSAVEOPT, + FeatureLAHFSAHF, + FeatureSlow3OpsLEA, + FeatureSlowIncDec, + FeatureAES, + FeatureRDRAND, + FeatureF16C, + FeatureFSGSBase, + FeatureAVX512, + FeatureERI, + FeatureCDI, + FeaturePFI, + FeaturePREFETCHWT1, + FeatureADX, + FeatureRDSEED, + FeatureMOVBE, + FeatureLZCNT, + FeatureBMI, + FeatureBMI2, + FeatureFMA, + FeaturePRFCHW, + FeatureSlowTwoMemOps, + FeatureFastPartialYMMorZMMWrite, + FeatureHasFastGather, + FeatureSlowPMADDWD]; + // TODO Add AVX5124FMAPS/AVX5124VNNIW features + list<SubtargetFeature> KNMFeatures = + !listconcat(KNLFeatures, [FeatureVPOPCNTDQ]); + + // AMD Zen Processors common ISAs + list<SubtargetFeature> ZNFeatures = [FeatureADX, + FeatureAES, + FeatureAVX2, + FeatureBMI, + FeatureBMI2, + FeatureCLFLUSHOPT, + FeatureCLZERO, + FeatureCMOV, + Feature64Bit, + FeatureCMPXCHG16B, + FeatureF16C, + FeatureFMA, + FeatureFSGSBase, + FeatureFXSR, + FeatureNOPL, + FeatureFastLZCNT, + FeatureLAHFSAHF, + FeatureLZCNT, + FeatureFastBEXTR, + FeatureFast15ByteNOP, + FeatureMacroFusion, + FeatureMMX, + FeatureMOVBE, + FeatureMWAITX, + FeaturePCLMUL, + FeaturePOPCNT, + FeaturePRFCHW, + FeatureRDRAND, + FeatureRDSEED, + FeatureSHA, + FeatureSSE4A, + FeatureSlowSHLD, + FeatureX87, + FeatureXSAVE, + FeatureXSAVEC, + FeatureXSAVEOPT, + FeatureXSAVES]; + list<SubtargetFeature> ZN2AdditionalFeatures = [FeatureCLWB, + FeatureRDPID, + FeatureWBNOINVD]; + list<SubtargetFeature> ZN2Features = + !listconcat(ZNFeatures, ZN2AdditionalFeatures); +} + +//===----------------------------------------------------------------------===// +// X86 processors supported. +//===----------------------------------------------------------------------===// class Proc<string Name, list<SubtargetFeature> Features> : ProcessorModel<Name, GenericModel, Features>; @@ -559,7 +853,8 @@ def : ProcessorModel<"penryn", SandyBridgeModel, [ ]>; // Atom CPUs. -class BonnellProc<string Name> : ProcessorModel<Name, AtomModel, [ +foreach P = ["bonnell", "atom"] in { +def : ProcessorModel<P, AtomModel, [ ProcIntelAtom, FeatureX87, FeatureSlowUAMem16, @@ -579,125 +874,58 @@ class BonnellProc<string Name> : ProcessorModel<Name, AtomModel, [ FeaturePadShortFunctions, FeatureLAHFSAHF ]>; -def : BonnellProc<"bonnell">; -def : BonnellProc<"atom">; // Pin the generic name to the baseline. - -class SilvermontProc<string Name> : ProcessorModel<Name, SLMModel, [ - ProcIntelSLM, - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureSSE42, - FeatureFXSR, - FeatureNOPL, - Feature64Bit, - FeatureCMPXCHG16B, - FeatureMOVBE, - FeaturePOPCNT, - FeaturePCLMUL, - FeatureSlowDivide64, - FeatureSlowTwoMemOps, - FeaturePRFCHW, - FeatureSlowLEA, - FeatureSlowIncDec, - FeatureSlowPMULLD, - FeatureRDRAND, - FeatureLAHFSAHF, - FeaturePOPCNTFalseDeps -]>; -def : SilvermontProc<"silvermont">; -def : SilvermontProc<"slm">; // Legacy alias. - -class ProcessorFeatures<list<SubtargetFeature> Inherited, - list<SubtargetFeature> NewFeatures> { - list<SubtargetFeature> Value = !listconcat(Inherited, NewFeatures); } -class ProcModel<string Name, SchedMachineModel Model, - list<SubtargetFeature> ProcFeatures, - list<SubtargetFeature> OtherFeatures> : - ProcessorModel<Name, Model, !listconcat(ProcFeatures, OtherFeatures)>; - -def GLMFeatures : ProcessorFeatures<[], [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureSSE42, - FeatureFXSR, - FeatureNOPL, - Feature64Bit, - FeatureCMPXCHG16B, - FeatureMOVBE, - FeaturePOPCNT, - FeaturePCLMUL, - FeatureAES, - FeaturePRFCHW, - FeatureSlowTwoMemOps, - FeatureSlowLEA, - FeatureSlowIncDec, - FeatureLAHFSAHF, - FeatureMPX, - FeatureSHA, - FeatureRDRAND, - FeatureRDSEED, - FeatureXSAVE, - FeatureXSAVEOPT, - FeatureXSAVEC, - FeatureXSAVES, - FeatureCLFLUSHOPT, - FeatureFSGSBase -]>; - -class GoldmontProc<string Name> : ProcModel<Name, SLMModel, - GLMFeatures.Value, [ - ProcIntelGLM, - FeaturePOPCNTFalseDeps -]>; -def : GoldmontProc<"goldmont">; - -def GLPFeatures : ProcessorFeatures<GLMFeatures.Value, [ - FeaturePTWRITE, - FeatureRDPID, - FeatureSGX -]>; +foreach P = ["silvermont", "slm"] in { + def : ProcessorModel<P, SLMModel, [ + ProcIntelSLM, + FeatureX87, + FeatureCMOV, + FeatureMMX, + FeatureSSE42, + FeatureFXSR, + FeatureNOPL, + Feature64Bit, + FeatureCMPXCHG16B, + FeatureMOVBE, + FeaturePOPCNT, + FeaturePCLMUL, + FeatureSlowDivide64, + FeatureSlowTwoMemOps, + FeaturePRFCHW, + FeatureSlowLEA, + FeatureSlowIncDec, + FeatureSlowPMULLD, + FeatureRDRAND, + FeatureLAHFSAHF, + FeaturePOPCNTFalseDeps + ]>; +} -class GoldmontPlusProc<string Name> : ProcModel<Name, SLMModel, - GLPFeatures.Value, [ - ProcIntelGLP -]>; -def : GoldmontPlusProc<"goldmont-plus">; - -class TremontProc<string Name> : ProcModel<Name, SLMModel, - GLPFeatures.Value, [ - ProcIntelTRM, - FeatureCLDEMOTE, - FeatureGFNI, - FeatureMOVDIRI, - FeatureMOVDIR64B, - FeatureWAITPKG -]>; -def : TremontProc<"tremont">; +def : ProcessorModel<"goldmont", SLMModel, ProcessorFeatures.GLMFeatures>; +def : ProcessorModel<"goldmont-plus", SLMModel, ProcessorFeatures.GLPFeatures>; +def : ProcessorModel<"tremont", SLMModel, ProcessorFeatures.TRMFeatures>; // "Arrandale" along with corei3 and corei5 -class NehalemProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureSSE42, - FeatureFXSR, - FeatureNOPL, - Feature64Bit, - FeatureCMPXCHG16B, - FeaturePOPCNT, - FeatureLAHFSAHF, - FeatureMacroFusion -]>; -def : NehalemProc<"nehalem">; -def : NehalemProc<"corei7">; +foreach P = ["nehalem", "corei7"] in { + def : ProcessorModel<P, SandyBridgeModel, [ + FeatureX87, + FeatureCMOV, + FeatureMMX, + FeatureSSE42, + FeatureFXSR, + FeatureNOPL, + Feature64Bit, + FeatureCMPXCHG16B, + FeaturePOPCNT, + FeatureLAHFSAHF, + FeatureMacroFusion + ]>; +} // Westmere is a similar machine to nehalem with some additional features. // Westmere is the corei3/i5/i7 path from nehalem to sandybridge -class WestmereProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [ +def : ProcessorModel<"westmere", SandyBridgeModel, [ FeatureX87, FeatureCMOV, FeatureMMX, @@ -711,231 +939,41 @@ class WestmereProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [ FeatureLAHFSAHF, FeatureMacroFusion ]>; -def : WestmereProc<"westmere">; - -// SSE is not listed here since llvm treats AVX as a reimplementation of SSE, -// rather than a superset. -def SNBFeatures : ProcessorFeatures<[], [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureAVX, - FeatureFXSR, - FeatureNOPL, - Feature64Bit, - FeatureCMPXCHG16B, - FeaturePOPCNT, - FeatureSlowDivide64, - FeaturePCLMUL, - FeatureXSAVE, - FeatureXSAVEOPT, - FeatureLAHFSAHF, - FeatureSlow3OpsLEA, - FeatureFastScalarFSQRT, - FeatureFastSHLDRotate, - FeatureMergeToThreeWayBranch, - FeatureMacroFusion -]>; - -class SandyBridgeProc<string Name> : ProcModel<Name, SandyBridgeModel, - SNBFeatures.Value, [ - FeatureSlowUAMem32, - FeaturePOPCNTFalseDeps -]>; -def : SandyBridgeProc<"sandybridge">; -def : SandyBridgeProc<"corei7-avx">; // Legacy alias. - -def IVBFeatures : ProcessorFeatures<SNBFeatures.Value, [ - FeatureRDRAND, - FeatureF16C, - FeatureFSGSBase -]>; - -class IvyBridgeProc<string Name> : ProcModel<Name, SandyBridgeModel, - IVBFeatures.Value, [ - FeatureSlowUAMem32, - FeaturePOPCNTFalseDeps -]>; -def : IvyBridgeProc<"ivybridge">; -def : IvyBridgeProc<"core-avx-i">; // Legacy alias. - -def HSWFeatures : ProcessorFeatures<IVBFeatures.Value, [ - FeatureAVX2, - FeatureBMI, - FeatureBMI2, - FeatureERMSB, - FeatureFMA, - FeatureINVPCID, - FeatureLZCNT, - FeatureMOVBE, - FeatureFastVariableShuffle -]>; - -class HaswellProc<string Name> : ProcModel<Name, HaswellModel, - HSWFeatures.Value, [ - FeaturePOPCNTFalseDeps, - FeatureLZCNTFalseDeps -]>; -def : HaswellProc<"haswell">; -def : HaswellProc<"core-avx2">; // Legacy alias. - -def BDWFeatures : ProcessorFeatures<HSWFeatures.Value, [ - FeatureADX, - FeatureRDSEED, - FeaturePRFCHW -]>; -class BroadwellProc<string Name> : ProcModel<Name, BroadwellModel, - BDWFeatures.Value, [ - FeaturePOPCNTFalseDeps, - FeatureLZCNTFalseDeps -]>; -def : BroadwellProc<"broadwell">; - -def SKLFeatures : ProcessorFeatures<BDWFeatures.Value, [ - FeatureAES, - FeatureMPX, - FeatureXSAVEC, - FeatureXSAVES, - FeatureCLFLUSHOPT, - FeatureFastVectorFSQRT -]>; - -class SkylakeClientProc<string Name> : ProcModel<Name, SkylakeClientModel, - SKLFeatures.Value, [ - FeatureHasFastGather, - FeaturePOPCNTFalseDeps, - FeatureSGX -]>; -def : SkylakeClientProc<"skylake">; - -def KNLFeatures : ProcessorFeatures<[], [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureFXSR, - FeatureNOPL, - Feature64Bit, - FeatureCMPXCHG16B, - FeaturePOPCNT, - FeatureSlowDivide64, - FeaturePCLMUL, - FeatureXSAVE, - FeatureXSAVEOPT, - FeatureLAHFSAHF, - FeatureSlow3OpsLEA, - FeatureSlowIncDec, - FeatureAES, - FeatureRDRAND, - FeatureF16C, - FeatureFSGSBase, - FeatureAVX512, - FeatureERI, - FeatureCDI, - FeaturePFI, - FeaturePREFETCHWT1, - FeatureADX, - FeatureRDSEED, - FeatureMOVBE, - FeatureLZCNT, - FeatureBMI, - FeatureBMI2, - FeatureFMA, - FeaturePRFCHW -]>; -// FIXME: define KNL model -class KnightsLandingProc<string Name> : ProcModel<Name, HaswellModel, - KNLFeatures.Value, [ - FeatureSlowTwoMemOps, - FeatureFastPartialYMMorZMMWrite, - FeatureHasFastGather, - FeatureSlowPMADDWD -]>; -def : KnightsLandingProc<"knl">; +foreach P = ["sandybridge", "corei7-avx"] in { + def : ProcessorModel<P, SandyBridgeModel, ProcessorFeatures.SNBFeatures>; +} -class KnightsMillProc<string Name> : ProcModel<Name, HaswellModel, - KNLFeatures.Value, [ - FeatureSlowTwoMemOps, - FeatureFastPartialYMMorZMMWrite, - FeatureHasFastGather, - FeatureSlowPMADDWD, - FeatureVPOPCNTDQ -]>; -def : KnightsMillProc<"knm">; // TODO Add AVX5124FMAPS/AVX5124VNNIW features - -def SKXFeatures : ProcessorFeatures<SKLFeatures.Value, [ - FeatureAVX512, - FeatureCDI, - FeatureDQI, - FeatureBWI, - FeatureVLX, - FeaturePKU, - FeatureCLWB -]>; +foreach P = ["ivybridge", "core-avx-i"] in { + def : ProcessorModel<P, SandyBridgeModel, ProcessorFeatures.IVBFeatures>; +} -class SkylakeServerProc<string Name> : ProcModel<Name, SkylakeServerModel, - SKXFeatures.Value, [ - FeatureHasFastGather, - FeaturePOPCNTFalseDeps -]>; -def : SkylakeServerProc<"skylake-avx512">; -def : SkylakeServerProc<"skx">; // Legacy alias. +foreach P = ["haswell", "core-avx2"] in { + def : ProcessorModel<P, HaswellModel, ProcessorFeatures.HSWFeatures>; +} -def CLXFeatures : ProcessorFeatures<SKXFeatures.Value, [ - FeatureVNNI -]>; +def : ProcessorModel<"broadwell", BroadwellModel, + ProcessorFeatures.BDWFeatures>; -class CascadelakeProc<string Name> : ProcModel<Name, SkylakeServerModel, - CLXFeatures.Value, [ - FeatureHasFastGather, - FeaturePOPCNTFalseDeps -]>; -def : CascadelakeProc<"cascadelake">; - -def CNLFeatures : ProcessorFeatures<SKLFeatures.Value, [ - FeatureAVX512, - FeatureCDI, - FeatureDQI, - FeatureBWI, - FeatureVLX, - FeaturePKU, - FeatureVBMI, - FeatureIFMA, - FeatureSHA, - FeatureSGX -]>; +def : ProcessorModel<"skylake", SkylakeClientModel, + ProcessorFeatures.SKLFeatures>; -class CannonlakeProc<string Name> : ProcModel<Name, SkylakeServerModel, - CNLFeatures.Value, [ - FeatureHasFastGather -]>; -def : CannonlakeProc<"cannonlake">; - -def ICLFeatures : ProcessorFeatures<CNLFeatures.Value, [ - FeatureBITALG, - FeatureVAES, - FeatureVBMI2, - FeatureVNNI, - FeatureVPCLMULQDQ, - FeatureVPOPCNTDQ, - FeatureGFNI, - FeatureCLWB, - FeatureRDPID -]>; +// FIXME: define KNL scheduler model +def : ProcessorModel<"knl", HaswellModel, ProcessorFeatures.KNLFeatures>; +def : ProcessorModel<"knm", HaswellModel, ProcessorFeatures.KNMFeatures>; -class IcelakeClientProc<string Name> : ProcModel<Name, SkylakeServerModel, - ICLFeatures.Value, [ - FeatureHasFastGather -]>; -def : IcelakeClientProc<"icelake-client">; +foreach P = ["skylake-avx512", "skx"] in { + def : ProcessorModel<P, SkylakeServerModel, ProcessorFeatures.SKXFeatures>; +} -class IcelakeServerProc<string Name> : ProcModel<Name, SkylakeServerModel, - ICLFeatures.Value, [ - FeaturePCONFIG, - FeatureWBNOINVD, - FeatureHasFastGather -]>; -def : IcelakeServerProc<"icelake-server">; +def : ProcessorModel<"cascadelake", SkylakeServerModel, + ProcessorFeatures.CLXFeatures>; +def : ProcessorModel<"cannonlake", SkylakeServerModel, + ProcessorFeatures.CNLFeatures>; +def : ProcessorModel<"icelake-client", SkylakeServerModel, + ProcessorFeatures.ICLFeatures>; +def : ProcessorModel<"icelake-server", SkylakeServerModel, + ProcessorFeatures.ICXFeatures>; // AMD CPUs. @@ -1143,58 +1181,8 @@ def : Proc<"bdver4", [ FeatureMacroFusion ]>; -// AMD Zen Processors common ISAs -def ZNFeatures : ProcessorFeatures<[], [ - FeatureADX, - FeatureAES, - FeatureAVX2, - FeatureBMI, - FeatureBMI2, - FeatureCLFLUSHOPT, - FeatureCLZERO, - FeatureCMOV, - Feature64Bit, - FeatureCMPXCHG16B, - FeatureF16C, - FeatureFMA, - FeatureFSGSBase, - FeatureFXSR, - FeatureNOPL, - FeatureFastLZCNT, - FeatureLAHFSAHF, - FeatureLZCNT, - FeatureFastBEXTR, - FeatureFast15ByteNOP, - FeatureMacroFusion, - FeatureMMX, - FeatureMOVBE, - FeatureMWAITX, - FeaturePCLMUL, - FeaturePOPCNT, - FeaturePRFCHW, - FeatureRDRAND, - FeatureRDSEED, - FeatureSHA, - FeatureSSE4A, - FeatureSlowSHLD, - FeatureX87, - FeatureXSAVE, - FeatureXSAVEC, - FeatureXSAVEOPT, - FeatureXSAVES]>; - -class Znver1Proc<string Name> : ProcModel<Name, Znver1Model, - ZNFeatures.Value, [ -]>; -def : Znver1Proc<"znver1">; - -class Znver2Proc<string Name> : ProcModel<Name, Znver1Model, - ZNFeatures.Value, [ - FeatureCLWB, - FeatureRDPID, - FeatureWBNOINVD -]>; -def : Znver2Proc<"znver2">; +def : ProcessorModel<"znver1", Znver1Model, ProcessorFeatures.ZNFeatures>; +def : ProcessorModel<"znver2", Znver1Model, ProcessorFeatures.ZN2Features>; def : Proc<"geode", [FeatureX87, FeatureSlowUAMem16, Feature3DNowA]>; |