diff options
author | Jacques Pienaar <jpienaar@google.com> | 2016-03-28 13:09:54 +0000 |
---|---|---|
committer | Jacques Pienaar <jpienaar@google.com> | 2016-03-28 13:09:54 +0000 |
commit | cf0b01d7ec9483bac120115278e15dbbf3e167c0 (patch) | |
tree | 388fc74c9a34aefc0cacadd262fb3e8d19789d8c /lib/Target/Lanai/LanaiSchedule.td | |
parent | 01605e4cf2526a0c1b4c8121fcd78606b3ec61ba (diff) |
[lanai] Add Lanai backend.
Add the Lanai backend to lib/Target.
General Lanai backend discussion on llvm-dev thread "[RFC] Lanai backend" (http://lists.llvm.org/pipermail/llvm-dev/2016-February/095118.html).
Differential Revision: http://reviews.llvm.org/D17011
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264578 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Lanai/LanaiSchedule.td')
-rw-r--r-- | lib/Target/Lanai/LanaiSchedule.td | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/Target/Lanai/LanaiSchedule.td b/lib/Target/Lanai/LanaiSchedule.td new file mode 100644 index 00000000000..949a2e28bef --- /dev/null +++ b/lib/Target/Lanai/LanaiSchedule.td @@ -0,0 +1,66 @@ +//=-LanaiSchedule.td - Lanai Scheduling Definitions --*- tablegen -*-=========// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +def ALU_FU : FuncUnit; +def LDST_FU : FuncUnit; + +def IIC_ALU : InstrItinClass; +def IIC_LD : InstrItinClass; +def IIC_ST : InstrItinClass; + +def LanaiItinerary : ProcessorItineraries<[ALU_FU, LDST_FU],[],[ + InstrItinData<IIC_LD, [InstrStage<1, [LDST_FU]>]>, + InstrItinData<IIC_ST, [InstrStage<1, [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; + + // Determines which instructions are allowed in a group. 1 is an inorder + // CPU with variable latencies. [default = -1] + let MinLatency = 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 WriteALU : SchedWrite; + +let SchedModel = LanaiSchedModel in { + def : WriteRes<WriteLD, [LdSt]> { let Latency = 2; } + def : WriteRes<WriteST, [LdSt]> { let Latency = 2; } + def : WriteRes<WriteALU, [ALU]> { let Latency = 1; } +} |