Enable SandyBridgeModel for all modern Intel P6 descendants.
All Intel CPUs since Yonah look a lot alike, at least at the granularity of the scheduling models. We can add more accurate models for processors that aren't Sandy Bridge if required. Haswell will probably need its own. The Atom processor and anything based on NetBurst is completely different. So are the non-Intel chips. llvm-svn: 178080
This commit is contained in:
parent
2ebf08ecbd
commit
1ac7e662d4
|
|
@ -145,9 +145,6 @@ def ProcIntelAtom : SubtargetFeature<"atom", "X86ProcFamily", "IntelAtom",
|
|||
class Proc<string Name, list<SubtargetFeature> Features>
|
||||
: ProcessorModel<Name, GenericModel, Features>;
|
||||
|
||||
class AtomProc<string Name, list<SubtargetFeature> Features>
|
||||
: ProcessorModel<Name, AtomModel, Features>;
|
||||
|
||||
def : Proc<"generic", []>;
|
||||
def : Proc<"i386", []>;
|
||||
def : Proc<"i486", []>;
|
||||
|
|
@ -164,46 +161,58 @@ def : Proc<"pentium4", [FeatureSSE2]>;
|
|||
def : Proc<"pentium4m", [FeatureSSE2, FeatureSlowBTMem]>;
|
||||
def : Proc<"x86-64", [FeatureSSE2, Feature64Bit, FeatureSlowBTMem,
|
||||
FeatureFastUAMem]>;
|
||||
def : Proc<"yonah", [FeatureSSE3, FeatureSlowBTMem]>;
|
||||
def : Proc<"prescott", [FeatureSSE3, FeatureSlowBTMem]>;
|
||||
def : Proc<"nocona", [FeatureSSE3, FeatureCMPXCHG16B,
|
||||
FeatureSlowBTMem]>;
|
||||
def : Proc<"core2", [FeatureSSSE3, FeatureCMPXCHG16B,
|
||||
FeatureSlowBTMem]>;
|
||||
def : Proc<"penryn", [FeatureSSE41, FeatureCMPXCHG16B,
|
||||
FeatureSlowBTMem]>;
|
||||
def : AtomProc<"atom", [ProcIntelAtom, FeatureSSSE3, FeatureCMPXCHG16B,
|
||||
FeatureMOVBE, FeatureSlowBTMem, FeatureLeaForSP,
|
||||
FeatureSlowDivide, FeaturePadShortFunctions]>;
|
||||
// Intel Core Duo.
|
||||
def : ProcessorModel<"yonah", SandyBridgeModel,
|
||||
[FeatureSSE3, FeatureSlowBTMem]>;
|
||||
|
||||
// NetBurst.
|
||||
def : Proc<"prescott", [FeatureSSE3, FeatureSlowBTMem]>;
|
||||
def : Proc<"nocona", [FeatureSSE3, FeatureCMPXCHG16B, FeatureSlowBTMem]>;
|
||||
|
||||
// Intel Core 2 Solo/Duo.
|
||||
def : ProcessorModel<"core2", SandyBridgeModel,
|
||||
[FeatureSSSE3, FeatureCMPXCHG16B, FeatureSlowBTMem]>;
|
||||
def : ProcessorModel<"penryn", SandyBridgeModel,
|
||||
[FeatureSSE41, FeatureCMPXCHG16B, FeatureSlowBTMem]>;
|
||||
|
||||
// Atom.
|
||||
def : ProcessorModel<"atom", AtomModel,
|
||||
[ProcIntelAtom, FeatureSSSE3, FeatureCMPXCHG16B,
|
||||
FeatureMOVBE, FeatureSlowBTMem, FeatureLeaForSP,
|
||||
FeatureSlowDivide, FeaturePadShortFunctions]>;
|
||||
|
||||
// "Arrandale" along with corei3 and corei5
|
||||
def : Proc<"corei7", [FeatureSSE42, FeatureCMPXCHG16B,
|
||||
FeatureSlowBTMem, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES]>;
|
||||
def : Proc<"nehalem", [FeatureSSE42, FeatureCMPXCHG16B,
|
||||
FeatureSlowBTMem, FeatureFastUAMem,
|
||||
FeaturePOPCNT]>;
|
||||
def : ProcessorModel<"corei7", SandyBridgeModel,
|
||||
[FeatureSSE42, FeatureCMPXCHG16B, FeatureSlowBTMem,
|
||||
FeatureFastUAMem, FeaturePOPCNT, FeatureAES]>;
|
||||
|
||||
def : ProcessorModel<"nehalem", SandyBridgeModel,
|
||||
[FeatureSSE42, FeatureCMPXCHG16B, FeatureSlowBTMem,
|
||||
FeatureFastUAMem, FeaturePOPCNT]>;
|
||||
// Westmere is a similar machine to nehalem with some additional features.
|
||||
// Westmere is the corei3/i5/i7 path from nehalem to sandybridge
|
||||
def : Proc<"westmere", [FeatureSSE42, FeatureCMPXCHG16B,
|
||||
FeatureSlowBTMem, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES, FeaturePCLMUL]>;
|
||||
def : ProcessorModel<"westmere", SandyBridgeModel,
|
||||
[FeatureSSE42, FeatureCMPXCHG16B, FeatureSlowBTMem,
|
||||
FeatureFastUAMem, FeaturePOPCNT, FeatureAES,
|
||||
FeaturePCLMUL]>;
|
||||
// Sandy Bridge
|
||||
// SSE is not listed here since llvm treats AVX as a reimplementation of SSE,
|
||||
// rather than a superset.
|
||||
def : Proc<"corei7-avx", [FeatureAVX, FeatureCMPXCHG16B, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES, FeaturePCLMUL]>;
|
||||
def : ProcessorModel<"corei7-avx", SandyBridgeModel,
|
||||
[FeatureAVX, FeatureCMPXCHG16B, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES, FeaturePCLMUL]>;
|
||||
// Ivy Bridge
|
||||
def : Proc<"core-avx-i", [FeatureAVX, FeatureCMPXCHG16B, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES, FeaturePCLMUL,
|
||||
FeatureRDRAND, FeatureF16C, FeatureFSGSBase]>;
|
||||
def : ProcessorModel<"core-avx-i", SandyBridgeModel,
|
||||
[FeatureAVX, FeatureCMPXCHG16B, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES, FeaturePCLMUL, FeatureRDRAND,
|
||||
FeatureF16C, FeatureFSGSBase]>;
|
||||
|
||||
// Haswell
|
||||
def : Proc<"core-avx2", [FeatureAVX2, FeatureCMPXCHG16B, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES, FeaturePCLMUL,
|
||||
FeatureRDRAND, FeatureF16C, FeatureFSGSBase,
|
||||
FeatureMOVBE, FeatureLZCNT, FeatureBMI,
|
||||
FeatureBMI2, FeatureFMA,
|
||||
FeatureRTM]>;
|
||||
def : ProcessorModel<"core-avx2", SandyBridgeModel,
|
||||
[FeatureAVX2, FeatureCMPXCHG16B, FeatureFastUAMem,
|
||||
FeaturePOPCNT, FeatureAES, FeaturePCLMUL, FeatureRDRAND,
|
||||
FeatureF16C, FeatureFSGSBase, FeatureMOVBE, FeatureLZCNT,
|
||||
FeatureBMI, FeatureBMI2, FeatureFMA, FeatureRTM]>;
|
||||
|
||||
def : Proc<"k6", [FeatureMMX]>;
|
||||
def : Proc<"k6-2", [Feature3DNow]>;
|
||||
|
|
|
|||
|
|
@ -565,3 +565,4 @@ def GenericModel : SchedMachineModel {
|
|||
}
|
||||
|
||||
include "X86ScheduleAtom.td"
|
||||
include "X86SchedSandyBridge.td"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
; RUN: llc < %s -mtriple=x86_64-apple-macosx -mcpu=core2 -enable-misched -misched=ilpmax | FileCheck -check-prefix=MAX %s
|
||||
; RUN: llc < %s -mtriple=x86_64-apple-macosx -mcpu=core2 -enable-misched -misched=ilpmin | FileCheck -check-prefix=MIN %s
|
||||
; RUN: llc < %s -mtriple=x86_64-apple-macosx -mcpu=nocona -enable-misched -misched=ilpmax | FileCheck -check-prefix=MAX %s
|
||||
; RUN: llc < %s -mtriple=x86_64-apple-macosx -mcpu=nocona -enable-misched -misched=ilpmin | FileCheck -check-prefix=MIN %s
|
||||
;
|
||||
; Basic verification of the ScheduleDAGILP metric.
|
||||
;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: llc < %s -march=x86-64 -asm-verbose=false -mtriple=x86_64-unknown-linux-gnu -mcpu=nehalem -post-RA-scheduler=true | FileCheck %s
|
||||
; RUN: llc < %s -march=x86-64 -asm-verbose=false -mtriple=x86_64-unknown-linux-gnu -mcpu=nehalem -post-RA-scheduler=true -schedmodel=false | FileCheck %s
|
||||
|
||||
; Currently, floating-point selects are lowered to CFG triangles.
|
||||
; This means that one side of the select is always unconditionally
|
||||
|
|
|
|||
Loading…
Reference in New Issue