From: Craig Topper Date: Tue, 12 Mar 2019 16:35:30 +0000 (+0000) Subject: [X86] Arrange more CPU features to inherit from earlier CPUs. NFCI X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=197205490e661756e11b01915c71178a7176c824;p=llvm [X86] Arrange more CPU features to inherit from earlier CPUs. NFCI This makes SandyBridge inherit back to Westmere/Nehalem. Make bdver1-4 inherit from each other and btver2 inherit from btver1. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355935 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86.td b/lib/Target/X86/X86.td index c25235f377e..7deae9152f8 100644 --- a/lib/Target/X86/X86.td +++ b/lib/Target/X86/X86.td @@ -469,30 +469,43 @@ include "X86SchedSkylakeServer.td" //===----------------------------------------------------------------------===// def ProcessorFeatures { - // Sandybridge - // SSE is not listed here since llvm treats AVX as a reimplementation of SSE, - // rather than a superset. - list SNBInheritableFeatures = [FeatureX87, + // Nehalem + list NHMInheritableFeatures = [FeatureX87, FeatureCMOV, FeatureMMX, - FeatureAVX, + FeatureSSE42, FeatureFXSR, FeatureNOPL, Feature64Bit, FeatureCMPXCHG16B, FeaturePOPCNT, - FeatureSlowDivide64, - FeaturePCLMUL, - FeatureXSAVE, - FeatureXSAVEOPT, FeatureLAHFSAHF, - FeatureSlow3OpsLEA, - FeatureFastScalarFSQRT, - FeatureFastSHLDRotate, - FeatureMergeToThreeWayBranch, FeatureMacroFusion]; + list NHMSpecificFeatures = []; + list NHMFeatures = + !listconcat(NHMInheritableFeatures, NHMSpecificFeatures); + + // Westmere + list WSMAdditionalFeatures = [FeaturePCLMUL]; + list WSMSpecificFeatures = []; + list WSMInheritableFeatures = + !listconcat(NHMInheritableFeatures, WSMAdditionalFeatures); + list WSMFeatures = + !listconcat(WSMInheritableFeatures, WSMSpecificFeatures); + + // Sandybridge + list SNBAdditionalFeatures = [FeatureAVX, + FeatureSlowDivide64, + FeatureXSAVE, + FeatureXSAVEOPT, + FeatureSlow3OpsLEA, + FeatureFastScalarFSQRT, + FeatureFastSHLDRotate, + FeatureMergeToThreeWayBranch]; list SNBSpecificFeatures = [FeatureSlowUAMem32, FeaturePOPCNTFalseDeps]; + list SNBInheritableFeatures = + !listconcat(WSMInheritableFeatures, SNBAdditionalFeatures); list SNBFeatures = !listconcat(SNBInheritableFeatures, SNBSpecificFeatures); @@ -614,36 +627,60 @@ def ProcessorFeatures { list ICXFeatures = !listconcat(ICLInheritableFeatures, ICXSpecificFeatures); + // Atom + list AtomInheritableFeatures = [FeatureX87, + FeatureCMOV, + FeatureMMX, + FeatureSSSE3, + FeatureFXSR, + FeatureNOPL, + Feature64Bit, + FeatureCMPXCHG16B, + FeatureMOVBE, + FeatureSlowTwoMemOps, + FeatureLAHFSAHF]; + list AtomSpecificFeatures = [ProcIntelAtom, + FeatureSlowUAMem16, + FeatureLEAForSP, + FeatureSlowDivide32, + FeatureSlowDivide64, + FeatureLEAUsesAG, + FeaturePadShortFunctions]; + list AtomFeatures = + !listconcat(AtomInheritableFeatures, AtomSpecificFeatures); + + // Silvermont + list SLMAdditionalFeatures = [FeatureSSE42, + FeaturePOPCNT, + FeaturePCLMUL, + FeaturePRFCHW, + FeatureSlowLEA, + FeatureSlowIncDec, + FeatureRDRAND]; + list SLMSpecificFeatures = [ProcIntelSLM, + FeatureSlowDivide64, + FeatureSlowPMULLD, + FeaturePOPCNTFalseDeps]; + list SLMInheritableFeatures = + !listconcat(AtomInheritableFeatures, SLMAdditionalFeatures); + list SLMFeatures = + !listconcat(SLMInheritableFeatures, SLMSpecificFeatures); + // Goldmont - list 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 GLMAdditionalFeatures = [FeatureAES, + FeatureMPX, + FeatureSHA, + FeatureRDSEED, + FeatureXSAVE, + FeatureXSAVEOPT, + FeatureXSAVEC, + FeatureXSAVES, + FeatureCLFLUSHOPT, + FeatureFSGSBase]; list GLMSpecificFeatures = [ProcIntelGLM, FeaturePOPCNTFalseDeps]; + list GLMInheritableFeatures = + !listconcat(SLMInheritableFeatures, GLMAdditionalFeatures); list GLMFeatures = !listconcat(GLMInheritableFeatures, GLMSpecificFeatures); @@ -709,6 +746,91 @@ def ProcessorFeatures { list KNMFeatures = !listconcat(KNLFeatures, [FeatureVPOPCNTDQ]); + + // Bobcat + list BtVer1InheritableFeatures = [FeatureX87, + FeatureCMOV, + FeatureMMX, + FeatureSSSE3, + FeatureSSE4A, + FeatureFXSR, + FeatureNOPL, + Feature64Bit, + FeatureCMPXCHG16B, + FeaturePRFCHW, + FeatureLZCNT, + FeaturePOPCNT, + FeatureSlowSHLD, + FeatureLAHFSAHF, + FeatureFast15ByteNOP]; + list BtVer1Features = BtVer1InheritableFeatures; + + // Jaguar + list BtVer2AdditionalFeatures = [FeatureAVX, + FeatureAES, + FeaturePCLMUL, + FeatureBMI, + FeatureF16C, + FeatureMOVBE, + FeatureXSAVE, + FeatureXSAVEOPT]; + list BtVer2SpecificFeatures = [FeatureFastLZCNT, + FeatureFastBEXTR, + FeatureFastPartialYMMorZMMWrite, + FeatureFastHorizontalOps]; + list BtVer2InheritableFeatures = + !listconcat(BtVer1InheritableFeatures, BtVer2AdditionalFeatures); + list BtVer2Features = + !listconcat(BtVer2InheritableFeatures, BtVer2SpecificFeatures); + + // Bulldozer + list BdVer1InheritableFeatures = [FeatureX87, + FeatureCMOV, + FeatureXOP, + Feature64Bit, + FeatureCMPXCHG16B, + FeatureAES, + FeaturePRFCHW, + FeaturePCLMUL, + FeatureMMX, + FeatureFXSR, + FeatureNOPL, + FeatureLZCNT, + FeaturePOPCNT, + FeatureXSAVE, + FeatureLWP, + FeatureSlowSHLD, + FeatureLAHFSAHF, + FeatureFast11ByteNOP, + FeatureMacroFusion]; + list BdVer1Features = BdVer1InheritableFeatures; + + // PileDriver + list BdVer2AdditionalFeatures = [FeatureF16C, + FeatureBMI, + FeatureTBM, + FeatureFMA, + FeatureFastBEXTR]; + list BdVer2InheritableFeatures = + !listconcat(BdVer1InheritableFeatures, BdVer2AdditionalFeatures); + list BdVer2Features = BdVer2InheritableFeatures; + + // Steamroller + list BdVer3AdditionalFeatures = [FeatureXSAVEOPT, + FeatureFSGSBase]; + list BdVer3InheritableFeatures = + !listconcat(BdVer2InheritableFeatures, BdVer3AdditionalFeatures); + list BdVer3Features = BdVer3InheritableFeatures; + + // Excavator + list BdVer4AdditionalFeatures = [FeatureAVX2, + FeatureBMI2, + FeatureMWAITX]; + list BdVer4InheritableFeatures = + !listconcat(BdVer3InheritableFeatures, BdVer4AdditionalFeatures); + list BdVer4Features = BdVer4InheritableFeatures; + + // AMD Zen Processors common ISAs list ZNFeatures = [FeatureADX, FeatureAES, @@ -854,52 +976,11 @@ def : ProcessorModel<"penryn", SandyBridgeModel, [ // Atom CPUs. foreach P = ["bonnell", "atom"] in { -def : ProcessorModel; + def : ProcessorModel; } foreach P = ["silvermont", "slm"] in { - def : ProcessorModel; + def : ProcessorModel; } def : ProcessorModel<"goldmont", SLMModel, ProcessorFeatures.GLMFeatures>; @@ -908,37 +989,12 @@ def : ProcessorModel<"tremont", SLMModel, ProcessorFeatures.TRMFeatures>; // "Arrandale" along with corei3 and corei5 foreach P = ["nehalem", "corei7"] in { - def : ProcessorModel; + def : ProcessorModel; } -// Westmere is a similar machine to nehalem with some additional features. // Westmere is the corei3/i5/i7 path from nehalem to sandybridge -def : ProcessorModel<"westmere", SandyBridgeModel, [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureSSE42, - FeatureFXSR, - FeatureNOPL, - Feature64Bit, - FeatureCMPXCHG16B, - FeaturePOPCNT, - FeaturePCLMUL, - FeatureLAHFSAHF, - FeatureMacroFusion -]>; +def : ProcessorModel<"westmere", SandyBridgeModel, + ProcessorFeatures.WSMFeatures>; foreach P = ["sandybridge", "corei7-avx"] in { def : ProcessorModel; @@ -1010,176 +1066,18 @@ foreach P = ["amdfam10", "barcelona"] in { } // Bobcat -def : Proc<"btver1", [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureSSSE3, - FeatureSSE4A, - FeatureFXSR, - FeatureNOPL, - Feature64Bit, - FeatureCMPXCHG16B, - FeaturePRFCHW, - FeatureLZCNT, - FeaturePOPCNT, - FeatureSlowSHLD, - FeatureLAHFSAHF, - FeatureFast15ByteNOP -]>; - +def : Proc<"btver1", ProcessorFeatures.BtVer1Features>; // Jaguar -def : ProcessorModel<"btver2", BtVer2Model, [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureAVX, - FeatureFXSR, - FeatureNOPL, - FeatureSSE4A, - Feature64Bit, - FeatureCMPXCHG16B, - FeaturePRFCHW, - FeatureAES, - FeaturePCLMUL, - FeatureBMI, - FeatureF16C, - FeatureMOVBE, - FeatureLZCNT, - FeatureFastLZCNT, - FeaturePOPCNT, - FeatureXSAVE, - FeatureXSAVEOPT, - FeatureSlowSHLD, - FeatureLAHFSAHF, - FeatureFast15ByteNOP, - FeatureFastBEXTR, - FeatureFastPartialYMMorZMMWrite, - FeatureFastHorizontalOps -]>; +def : ProcessorModel<"btver2", BtVer2Model, ProcessorFeatures.BtVer2Features>; // Bulldozer -def : ProcessorModel<"bdver1", BdVer2Model, [ - FeatureX87, - FeatureCMOV, - FeatureXOP, - FeatureFMA4, - Feature64Bit, - FeatureCMPXCHG16B, - FeatureAES, - FeaturePRFCHW, - FeaturePCLMUL, - FeatureMMX, - FeatureAVX, - FeatureFXSR, - FeatureNOPL, - FeatureSSE4A, - FeatureLZCNT, - FeaturePOPCNT, - FeatureXSAVE, - FeatureLWP, - FeatureSlowSHLD, - FeatureLAHFSAHF, - FeatureFast11ByteNOP, - FeatureMacroFusion -]>; +def : ProcessorModel<"bdver1", BdVer2Model, ProcessorFeatures.BdVer1Features>; // Piledriver -def : ProcessorModel<"bdver2", BdVer2Model, [ - FeatureX87, - FeatureCMOV, - FeatureXOP, - FeatureFMA4, - Feature64Bit, - FeatureCMPXCHG16B, - FeatureAES, - FeaturePRFCHW, - FeaturePCLMUL, - FeatureMMX, - FeatureAVX, - FeatureFXSR, - FeatureNOPL, - FeatureSSE4A, - FeatureF16C, - FeatureLZCNT, - FeaturePOPCNT, - FeatureXSAVE, - FeatureBMI, - FeatureTBM, - FeatureLWP, - FeatureFMA, - FeatureSlowSHLD, - FeatureLAHFSAHF, - FeatureFast11ByteNOP, - FeatureFastBEXTR, - FeatureMacroFusion -]>; - +def : ProcessorModel<"bdver2", BdVer2Model, ProcessorFeatures.BdVer2Features>; // Steamroller -def : Proc<"bdver3", [ - FeatureX87, - FeatureCMOV, - FeatureXOP, - FeatureFMA4, - Feature64Bit, - FeatureCMPXCHG16B, - FeatureAES, - FeaturePRFCHW, - FeaturePCLMUL, - FeatureMMX, - FeatureAVX, - FeatureFXSR, - FeatureNOPL, - FeatureSSE4A, - FeatureF16C, - FeatureLZCNT, - FeaturePOPCNT, - FeatureXSAVE, - FeatureBMI, - FeatureTBM, - FeatureLWP, - FeatureFMA, - FeatureXSAVEOPT, - FeatureSlowSHLD, - FeatureFSGSBase, - FeatureLAHFSAHF, - FeatureFast11ByteNOP, - FeatureFastBEXTR, - FeatureMacroFusion -]>; - +def : Proc<"bdver3", ProcessorFeatures.BdVer3Features>; // Excavator -def : Proc<"bdver4", [ - FeatureX87, - FeatureCMOV, - FeatureMMX, - FeatureAVX2, - FeatureFXSR, - FeatureNOPL, - FeatureXOP, - FeatureFMA4, - Feature64Bit, - FeatureCMPXCHG16B, - FeatureAES, - FeaturePRFCHW, - FeaturePCLMUL, - FeatureF16C, - FeatureLZCNT, - FeaturePOPCNT, - FeatureXSAVE, - FeatureBMI, - FeatureBMI2, - FeatureTBM, - FeatureLWP, - FeatureFMA, - FeatureXSAVEOPT, - FeatureSlowSHLD, - FeatureFSGSBase, - FeatureLAHFSAHF, - FeatureFastBEXTR, - FeatureFast11ByteNOP, - FeatureMWAITX, - FeatureMacroFusion -]>; +def : Proc<"bdver4", ProcessorFeatures.BdVer4Features>; def : ProcessorModel<"znver1", Znver1Model, ProcessorFeatures.ZNFeatures>; def : ProcessorModel<"znver2", Znver1Model, ProcessorFeatures.ZN2Features>;