X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86ScheduleAtom.td;h=4c559c9c1798da2ef7dc7e17cfd8946db627fe71;hb=09816bb5493ff7d0645dc5b254a18a6c0d0a4078;hp=56dd3407b2605880ec36b98343e9240e7a5e8953;hpb=1d98530196feee3b1b3ddcd793377b9b430a411e;p=oota-llvm.git diff --git a/lib/Target/X86/X86ScheduleAtom.td b/lib/Target/X86/X86ScheduleAtom.td index 56dd3407b26..4c559c9c179 100644 --- a/lib/Target/X86/X86ScheduleAtom.td +++ b/lib/Target/X86/X86ScheduleAtom.td @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// This file defines the itinerary class data for the Intel Atom (Bonnell) -// processors. +// This file defines the itinerary class data for the Intel Atom +// in order (Saltwell-32nm/Bonnell-45nm) processors. // //===----------------------------------------------------------------------===// @@ -22,12 +22,7 @@ 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 : 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) +def AtomItineraries : ProcessorItineraries< [ Port0, Port1 ], [], [ // P0 only @@ -38,7 +33,6 @@ def AtomItineraries : MultiIssueItineraries< // InstrItinData, InstrStage] >, // // Default is 1 cycle, port0 or port1 - InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, @@ -85,9 +79,12 @@ def AtomItineraries : MultiIssueItineraries< // neg/not/inc/dec InstrItinData] >, InstrItinData] >, - // add/sub/and/or/xor/adc/sbc/cmp/test + // add/sub/and/or/xor/cmp/test InstrItinData] >, InstrItinData] >, + // adc/sbc + InstrItinData] >, + InstrItinData] >, // shift/rotate InstrItinData] >, // shift double @@ -209,18 +206,28 @@ def AtomItineraries : MultiIssueItineraries< InstrItinData] >, InstrItinData] >, - InstrItinData] >, - InstrItinData] >, + InstrItinData] >, InstrItinData] >, - InstrItinData] >, + InstrItinData] >, + InstrItinData] >, InstrItinData] >, - InstrItinData] >, - InstrItinData] >, - InstrItinData] >, - InstrItinData] >, + InstrItinData] >, + InstrItinData] >, + InstrItinData] >, + InstrItinData] >, + + InstrItinData] >, + InstrItinData] >, + InstrItinData] >, + InstrItinData] >, + + InstrItinData] >, + InstrItinData] >, + InstrItinData] >, + InstrItinData] >, InstrItinData] >, InstrItinData] >, @@ -279,7 +286,8 @@ def AtomItineraries : MultiIssueItineraries< InstrItinData] >, InstrItinData] >, - InstrItinData] >, + InstrItinData] >, + InstrItinData] >, InstrItinData] >, InstrItinData] >, @@ -471,8 +479,8 @@ def AtomItineraries : MultiIssueItineraries< InstrItinData] >, InstrItinData] >, - InstrItinData] >, - InstrItinData] >, + InstrItinData] >, + InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, @@ -519,7 +527,23 @@ def AtomItineraries : MultiIssueItineraries< InstrItinData] >, InstrItinData] >, InstrItinData] >, + InstrItinData] >, + InstrItinData] >, InstrItinData] > ]>; +// Atom machine model. +def AtomModel : SchedMachineModel { + let IssueWidth = 2; // Allows 2 instructions per scheduling group. + 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. + + // On the Atom, the throughput for taken branches is 2 cycles. For small + // simple loops, expand by a small factor to hide the backedge cost. + let LoopMicroOpBufferSize = 10; + let PostRAScheduler = 1; + + let Itineraries = AtomItineraries; +}