1 //=-LanaiSchedule.td - Lanai Scheduling Definitions --*- tablegen -*-=========//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 def ALU_FU : FuncUnit;
11 def LDST_FU : FuncUnit;
13 def IIC_ALU : InstrItinClass;
14 def IIC_LD : InstrItinClass;
15 def IIC_ST : InstrItinClass;
16 def IIC_LDSW : InstrItinClass;
17 def IIC_STSW : InstrItinClass;
19 def LanaiItinerary : ProcessorItineraries<[ALU_FU, LDST_FU],[],[
20 InstrItinData<IIC_LD, [InstrStage<1, [LDST_FU]>]>,
21 InstrItinData<IIC_ST, [InstrStage<1, [LDST_FU]>]>,
22 InstrItinData<IIC_LDSW, [InstrStage<2, [LDST_FU]>]>,
23 InstrItinData<IIC_STSW, [InstrStage<2, [LDST_FU]>]>,
24 InstrItinData<IIC_ALU, [InstrStage<1, [ALU_FU]>]>
27 def LanaiSchedModel : SchedMachineModel {
28 // Cycles for loads to access the cache [default = -1]
31 // Max micro-ops that can be buffered for optimized loop dispatch/execution.
33 let LoopMicroOpBufferSize = 0;
35 // Allow scheduler to assign default model to any unrecognized opcodes.
37 let CompleteModel = 0;
39 // Max micro-ops that may be scheduled per cycle. [default = 1]
42 // Extra cycles for a mispredicted branch. [default = -1]
43 let MispredictPenalty = 10;
45 // Enable Post RegAlloc Scheduler pass. [default = 0]
46 let PostRAScheduler = 0;
48 // Max micro-ops that can be buffered. [default = -1]
49 let MicroOpBufferSize = 0;
51 // Per-cycle resources tables. [default = NoItineraries]
52 let Itineraries = LanaiItinerary;
55 def ALU : ProcResource<1> { let BufferSize = 0; }
56 def LdSt : ProcResource<1> { let BufferSize = 0; }
58 def WriteLD : SchedWrite;
59 def WriteST : SchedWrite;
60 def WriteLDSW : SchedWrite;
61 def WriteSTSW : SchedWrite;
62 def WriteALU : SchedWrite;
64 let SchedModel = LanaiSchedModel in {
65 def : WriteRes<WriteLD, [LdSt]> { let Latency = 2; }
66 def : WriteRes<WriteST, [LdSt]> { let Latency = 2; }
67 def : WriteRes<WriteLDSW, [LdSt]> { let Latency = 2; }
68 def : WriteRes<WriteSTSW, [LdSt]> { let Latency = 4; }
69 def : WriteRes<WriteALU, [ALU]> { let Latency = 1; }