llvm/lib/Target/CellSPU/SPUSchedule.td
Anton Korobeynikov 928eb49cae Make processor FUs unique for given itinerary. This extends the limit of 32
FU per CPU arch to 32 per intinerary allowing precise modelling of quite
complex pipelines in the future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101754 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-18 20:31:01 +00:00

58 lines
3.0 KiB
TableGen

//===- SPUSchedule.td - Cell Scheduling Definitions --------*- tablegen -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
// Even pipeline:
def EVEN_UNIT : FuncUnit; // Even execution unit: (PC & 0x7 == 000)
def ODD_UNIT : FuncUnit; // Odd execution unit: (PC & 0x7 == 100)
//===----------------------------------------------------------------------===//
// Instruction Itinerary classes used for Cell SPU
//===----------------------------------------------------------------------===//
def LoadStore : InstrItinClass; // ODD_UNIT
def BranchHints : InstrItinClass; // ODD_UNIT
def BranchResolv : InstrItinClass; // ODD_UNIT
def ChanOpSPR : InstrItinClass; // ODD_UNIT
def ShuffleOp : InstrItinClass; // ODD_UNIT
def SelectOp : InstrItinClass; // ODD_UNIT
def GatherOp : InstrItinClass; // ODD_UNIT
def LoadNOP : InstrItinClass; // ODD_UNIT
def ExecNOP : InstrItinClass; // EVEN_UNIT
def SPrecFP : InstrItinClass; // EVEN_UNIT
def DPrecFP : InstrItinClass; // EVEN_UNIT
def FPInt : InstrItinClass; // EVEN_UNIT (FP<->integer)
def ByteOp : InstrItinClass; // EVEN_UNIT
def IntegerOp : InstrItinClass; // EVEN_UNIT
def IntegerMulDiv: InstrItinClass; // EVEN_UNIT
def RotateShift : InstrItinClass; // EVEN_UNIT
def ImmLoad : InstrItinClass; // EVEN_UNIT
/* Note: The itinerary for the Cell SPU is somewhat contrived... */
def SPUItineraries : ProcessorItineraries<[ODD_UNIT, EVEN_UNIT], [
InstrItinData<LoadStore , [InstrStage<6, [ODD_UNIT]>]>,
InstrItinData<BranchHints , [InstrStage<6, [ODD_UNIT]>]>,
InstrItinData<BranchResolv, [InstrStage<4, [ODD_UNIT]>]>,
InstrItinData<ChanOpSPR , [InstrStage<6, [ODD_UNIT]>]>,
InstrItinData<ShuffleOp , [InstrStage<4, [ODD_UNIT]>]>,
InstrItinData<SelectOp , [InstrStage<4, [ODD_UNIT]>]>,
InstrItinData<GatherOp , [InstrStage<4, [ODD_UNIT]>]>,
InstrItinData<LoadNOP , [InstrStage<1, [ODD_UNIT]>]>,
InstrItinData<ExecNOP , [InstrStage<1, [EVEN_UNIT]>]>,
InstrItinData<SPrecFP , [InstrStage<6, [EVEN_UNIT]>]>,
InstrItinData<DPrecFP , [InstrStage<13, [EVEN_UNIT]>]>,
InstrItinData<FPInt , [InstrStage<2, [EVEN_UNIT]>]>,
InstrItinData<ByteOp , [InstrStage<4, [EVEN_UNIT]>]>,
InstrItinData<IntegerOp , [InstrStage<2, [EVEN_UNIT]>]>,
InstrItinData<RotateShift , [InstrStage<4, [EVEN_UNIT]>]>,
InstrItinData<IntegerMulDiv,[InstrStage<7, [EVEN_UNIT]>]>,
InstrItinData<ImmLoad , [InstrStage<2, [EVEN_UNIT]>]>
]>;