mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-31 07:43:37 +00:00
Update machine models. Specify buffer sizes for OOO processors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184033 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b86a0cdb67
commit
a5ce5f36d3
@ -1883,7 +1883,7 @@ def CortexA9Itineraries : ProcessorItineraries<
|
||||
// Cortex-A9 machine model for scheduling and other instruction cost heuristics.
|
||||
def CortexA9Model : SchedMachineModel {
|
||||
let IssueWidth = 2; // 2 micro-ops are dispatched per cycle.
|
||||
let MinLatency = 0; // Data dependencies are allowed within dispatch groups.
|
||||
let MicroOpBufferSize = 56; // Based on available renamed registers.
|
||||
let LoadLatency = 2; // Optimistic load latency assuming bypass.
|
||||
// This is overriden by OperandCycles if the
|
||||
// Itineraries are queried instead.
|
||||
@ -1901,7 +1901,7 @@ def A9UnitALU : ProcResource<2>;
|
||||
def A9UnitMul : ProcResource<1> { let Super = A9UnitALU; }
|
||||
def A9UnitAGU : ProcResource<1>;
|
||||
def A9UnitLS : ProcResource<1>;
|
||||
def A9UnitFP : ProcResource<1>;
|
||||
def A9UnitFP : ProcResource<1> { let BufferSize = 0; }
|
||||
def A9UnitB : ProcResource<1>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -1076,7 +1076,7 @@ def SwiftItineraries : ProcessorItineraries<
|
||||
// Swift machine model for scheduling and other instruction cost heuristics.
|
||||
def SwiftModel : SchedMachineModel {
|
||||
let IssueWidth = 3; // 3 micro-ops are dispatched per cycle.
|
||||
let MinLatency = 0; // Data dependencies are allowed within dispatch groups.
|
||||
let MicroOpBufferSize = 45; // Based on NEON renamed registers.
|
||||
let LoadLatency = 3;
|
||||
let MispredictPenalty = 14; // A branch direction mispredict.
|
||||
|
||||
|
@ -16,7 +16,7 @@ def HaswellModel : SchedMachineModel {
|
||||
// All x86 instructions are modeled as a single micro-op, and HW can decode 4
|
||||
// instructions per cycle.
|
||||
let IssueWidth = 4;
|
||||
let MinLatency = 0; // 0 = Out-of-order execution.
|
||||
let MicroOpBufferSize = 192; // Based on the reorder buffer.
|
||||
let LoadLatency = 4;
|
||||
let MispredictPenalty = 16;
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ def SandyBridgeModel : SchedMachineModel {
|
||||
// instructions per cycle.
|
||||
// FIXME: Identify instructions that aren't a single fused micro-op.
|
||||
let IssueWidth = 4;
|
||||
let MinLatency = 0; // 0 = Out-of-order execution.
|
||||
let MicroOpBufferSize = 168; // Based on the reorder buffer.
|
||||
let LoadLatency = 4;
|
||||
let MispredictPenalty = 16;
|
||||
}
|
||||
|
@ -550,8 +550,9 @@ def IIC_NOP : InstrItinClass;
|
||||
// Resources beyond the decoder operate on micro-ops and are bufferred
|
||||
// so adjacent micro-ops don't directly compete.
|
||||
//
|
||||
// MinLatency=0 indicates that RAW dependencies can be decoded in the
|
||||
// same cycle.
|
||||
// MicroOpBufferSize > 1 indicates that RAW dependencies can be
|
||||
// decoded in the same cycle. The value 32 is a reasonably arbitrary
|
||||
// number of in-flight instructions.
|
||||
//
|
||||
// HighLatency=10 is optimistic. X86InstrInfo::isHighLatencyDef
|
||||
// indicates high latency opcodes. Alternatively, InstrItinData
|
||||
@ -562,7 +563,7 @@ def IIC_NOP : InstrItinClass;
|
||||
// The GenericModel contains no instruciton itineraries.
|
||||
def GenericModel : SchedMachineModel {
|
||||
let IssueWidth = 4;
|
||||
let MinLatency = 0;
|
||||
let MicroOpBufferSize = 32;
|
||||
let LoadLatency = 4;
|
||||
let HighLatency = 10;
|
||||
}
|
||||
|
@ -525,8 +525,7 @@ def AtomItineraries : ProcessorItineraries<
|
||||
// Atom machine model.
|
||||
def AtomModel : SchedMachineModel {
|
||||
let IssueWidth = 2; // Allows 2 instructions per scheduling group.
|
||||
let MinLatency = 1; // InstrStage cycles overrides MinLatency.
|
||||
// OperandCycles may be used for expected latency.
|
||||
let MicroOpBufferSize = 0; // In-order execution, always hide latency.
|
||||
let LoadLatency = 3; // Expected cycles, may be overriden by OperandCycles.
|
||||
let HighLatency = 30;// Expected, may be overriden by OperandCycles.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user