| //=-LanaiSchedule.td - Lanai Scheduling Definitions --*- tablegen -*-=========// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| def ALU_FU : FuncUnit; |
| def LDST_FU : FuncUnit; |
| |
| def IIC_ALU : InstrItinClass; |
| def IIC_LD : InstrItinClass; |
| def IIC_ST : InstrItinClass; |
| def IIC_LDSW : InstrItinClass; |
| def IIC_STSW : InstrItinClass; |
| |
| def LanaiItinerary : ProcessorItineraries<[ALU_FU, LDST_FU],[],[ |
| InstrItinData<IIC_LD, [InstrStage<1, [LDST_FU]>]>, |
| InstrItinData<IIC_ST, [InstrStage<1, [LDST_FU]>]>, |
| InstrItinData<IIC_LDSW, [InstrStage<2, [LDST_FU]>]>, |
| InstrItinData<IIC_STSW, [InstrStage<2, [LDST_FU]>]>, |
| InstrItinData<IIC_ALU, [InstrStage<1, [ALU_FU]>]> |
| ]>; |
| |
| def LanaiSchedModel : SchedMachineModel { |
| // Cycles for loads to access the cache [default = -1] |
| let LoadLatency = 2; |
| |
| // Max micro-ops that can be buffered for optimized loop dispatch/execution. |
| // [default = -1] |
| let LoopMicroOpBufferSize = 0; |
| |
| // Allow scheduler to assign default model to any unrecognized opcodes. |
| // [default = 1] |
| let CompleteModel = 0; |
| |
| // Max micro-ops that may be scheduled per cycle. [default = 1] |
| let IssueWidth = 1; |
| |
| // Extra cycles for a mispredicted branch. [default = -1] |
| let MispredictPenalty = 10; |
| |
| // Enable Post RegAlloc Scheduler pass. [default = 0] |
| let PostRAScheduler = 0; |
| |
| // Max micro-ops that can be buffered. [default = -1] |
| let MicroOpBufferSize = 0; |
| |
| // Per-cycle resources tables. [default = NoItineraries] |
| let Itineraries = LanaiItinerary; |
| } |
| |
| def ALU : ProcResource<1> { let BufferSize = 0; } |
| def LdSt : ProcResource<1> { let BufferSize = 0; } |
| |
| def WriteLD : SchedWrite; |
| def WriteST : SchedWrite; |
| def WriteLDSW : SchedWrite; |
| def WriteSTSW : SchedWrite; |
| def WriteALU : SchedWrite; |
| |
| let SchedModel = LanaiSchedModel in { |
| def : WriteRes<WriteLD, [LdSt]> { let Latency = 2; } |
| def : WriteRes<WriteST, [LdSt]> { let Latency = 2; } |
| def : WriteRes<WriteLDSW, [LdSt]> { let Latency = 2; } |
| def : WriteRes<WriteSTSW, [LdSt]> { let Latency = 4; } |
| def : WriteRes<WriteALU, [ALU]> { let Latency = 1; } |
| } |