[llvm-commits] [llvm] r157981 - in /llvm/trunk/lib/Target/X86: X86Schedule.td X86ScheduleAtom.td
Andrew Trick
atrick at apple.com
Mon Jun 4 20:44:46 PDT 2012
Author: atrick
Date: Mon Jun 4 22:44:46 2012
New Revision: 157981
URL: http://llvm.org/viewvc/llvm-project?rev=157981&view=rev
Log:
X86 itinerary properties.
Modified:
llvm/trunk/lib/Target/X86/X86Schedule.td
llvm/trunk/lib/Target/X86/X86ScheduleAtom.td
Modified: llvm/trunk/lib/Target/X86/X86Schedule.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Schedule.td?rev=157981&r1=157980&r2=157981&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86Schedule.td (original)
+++ llvm/trunk/lib/Target/X86/X86Schedule.td Mon Jun 4 22:44:46 2012
@@ -456,6 +456,28 @@
//===----------------------------------------------------------------------===//
// 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"
Modified: llvm/trunk/lib/Target/X86/X86ScheduleAtom.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ScheduleAtom.td?rev=157981&r1=157980&r2=157981&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ScheduleAtom.td (original)
+++ llvm/trunk/lib/Target/X86/X86ScheduleAtom.td Mon Jun 4 22:44:46 2012
@@ -22,7 +22,12 @@
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
More information about the llvm-commits
mailing list