mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-06 09:54:49 +00:00
subtarget CPU descriptions and support new features of MachineScheduler. MachineModel has three categories of data: 1) Basic properties for coarse grained instruction cost model. 2) Scheduler Read/Write resources for simple per-opcode and operand cost model (TBD). 3) Instruction itineraties for detailed per-cycle reservation tables. These will all live side-by-side. Any subtarget can use any combination of them. Instruction itineraries will not change in the near term. In the long run, I expect them to only be relevant for in-order VLIW machines that have complex contraints and require a precise scheduling/bundling model. Once itineraries are only actively used by VLIW-ish targets, they could be replaced by something more appropriate for those targets. This tablegen backend rewrite sets things up for introducing MachineModel type #2: per opcode/operand cost model. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159891 91177308-0d34-0410-b5e6-96231b3b80d8
61 lines
2.3 KiB
TableGen
61 lines
2.3 KiB
TableGen
//===- HexagonSchedule.td - Hexagon Scheduling Definitions -*- tablegen -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Functional Units
|
|
def LUNIT : FuncUnit;
|
|
def LSUNIT : FuncUnit;
|
|
def MUNIT : FuncUnit;
|
|
def SUNIT : FuncUnit;
|
|
|
|
// Itinerary classes
|
|
def ALU32 : InstrItinClass;
|
|
def ALU64 : InstrItinClass;
|
|
def CR : InstrItinClass;
|
|
def J : InstrItinClass;
|
|
def JR : InstrItinClass;
|
|
def LD : InstrItinClass;
|
|
def M : InstrItinClass;
|
|
def ST : InstrItinClass;
|
|
def S : InstrItinClass;
|
|
def SYS : InstrItinClass;
|
|
def MARKER : InstrItinClass;
|
|
def PSEUDO : InstrItinClass;
|
|
|
|
def HexagonItineraries :
|
|
ProcessorItineraries<[LUNIT, LSUNIT, MUNIT, SUNIT], [], [
|
|
InstrItinData<ALU32 , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
|
|
InstrItinData<ALU64 , [InstrStage<1, [MUNIT, SUNIT]>]>,
|
|
InstrItinData<CR , [InstrStage<1, [SUNIT]>]>,
|
|
InstrItinData<J , [InstrStage<1, [SUNIT, MUNIT]>]>,
|
|
InstrItinData<JR , [InstrStage<1, [MUNIT]>]>,
|
|
InstrItinData<LD , [InstrStage<1, [LUNIT, LSUNIT]>]>,
|
|
InstrItinData<M , [InstrStage<1, [MUNIT, SUNIT]>]>,
|
|
InstrItinData<ST , [InstrStage<1, [LSUNIT]>]>,
|
|
InstrItinData<S , [InstrStage<1, [SUNIT, MUNIT]>]>,
|
|
InstrItinData<SYS , [InstrStage<1, [LSUNIT]>]>,
|
|
InstrItinData<MARKER , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
|
|
InstrItinData<PSEUDO , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>
|
|
]>;
|
|
|
|
def HexagonModel : SchedMachineModel {
|
|
// Max issue per cycle == bundle width.
|
|
let IssueWidth = 4;
|
|
let Itineraries = HexagonItineraries;
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// V4 Machine Info +
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "HexagonScheduleV4.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// V4 Machine Info -
|
|
//===----------------------------------------------------------------------===//
|