X86 itinerary properties.
authorAndrew Trick <atrick@apple.com>
Tue, 5 Jun 2012 03:44:46 +0000 (03:44 +0000)
committerAndrew Trick <atrick@apple.com>
Tue, 5 Jun 2012 03:44:46 +0000 (03:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157981 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86Schedule.td
lib/Target/X86/X86ScheduleAtom.td

index f670f28b443f91ed398fcf19186024a666cf7025..4331cf31e89149565e5c28721a5c118d1db83df3 100644 (file)
@@ -456,6 +456,28 @@ def IIC_NOP : InstrItinClass;
 //===----------------------------------------------------------------------===//
 // Processor instruction itineraries.
 
-def GenericItineraries : ProcessorItineraries<[], [], []>;
+// IssueWidth is analagous to the number of decode units. Core and its
+// descendents, including Nehalem and SandyBridge have 4 decoders.
+// 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.
+//
+// HighLatency=10 is optimistic. X86InstrInfo::isHighLatencyDef
+// indicates high latency opcodes. Alternatively, InstrItinData
+// entries may be included here to define specific operand
+// latencies. Since these latencies are not used for pipeline hazards,
+// they do not need to be exact.
+//
+// This set of instruction itineraries should contain no reference to
+// InstrStages. When an iterary has no stages, the scheduler can
+// bypass the logic needed for checking pipeline stage hazards.
+def GenericItineraries : MultiIssueItineraries<
+  4, // IssueWidth
+  0, // MinLatency
+  4, // LoadLatency (expected, may be overriden by OperandCycles)
+ 10, // HighLatency (expected, may be overriden by OperandCycles)
+ [], [], []>; // no FuncUnits, Bypasses, or InstrItinData.
 
 include "X86ScheduleAtom.td"
index 81530b5f1f712652e3b9d3e06f9660a9f99ae8ec..56dd3407b2605880ec36b98343e9240e7a5e8953 100644 (file)
@@ -22,7 +22,12 @@ def Port0 : FuncUnit; // ALU: ALU0, shift/rotate, load/store
 def Port1 : FuncUnit; // ALU: ALU1, bit processing, jump, and LEA
                       // SIMD/FP: SIMD ALU, FP Adder
 
-def AtomItineraries : ProcessorItineraries<
+def AtomItineraries : MultiIssueItineraries<
+  2, // IssueWidth=2 allows 2 instructions per scheduling group.
+  1, // MinLatency=1. InstrStage cycles overrides MinLatency.
+     //               OperandCycles may be used for expected latency.
+  3, // LoadLatency (expected, may be overriden by OperandCycles)
+  30,// HighLatency (expected, may be overriden by OperandCycles)
   [ Port0, Port1 ],
   [], [
   // P0 only