MipsSchedule.td revision 263508
1//===-- MipsSchedule.td - Mips Scheduling Definitions ------*- tablegen -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10//===----------------------------------------------------------------------===//
11// Functional units across Mips chips sets. Based on GCC/Mips backend files.
12//===----------------------------------------------------------------------===//
13def ALU     : FuncUnit;
14def IMULDIV : FuncUnit;
15
16//===----------------------------------------------------------------------===//
17// Instruction Itinerary classes used for Mips
18//===----------------------------------------------------------------------===//
19def IIAlu              : InstrItinClass;
20def IIArith            : InstrItinClass;
21def IILogic            : InstrItinClass;
22def IILoad             : InstrItinClass;
23def IIStore            : InstrItinClass;
24def IIXfer             : InstrItinClass;
25def IIBranch           : InstrItinClass;
26def IIHiLo             : InstrItinClass;
27def IIImul             : InstrItinClass;
28def IIImult            : InstrItinClass;
29def IIIdiv             : InstrItinClass;
30def IIseb              : InstrItinClass;
31def IIslt              : InstrItinClass;
32def IIFcvt             : InstrItinClass;
33def IIFmove            : InstrItinClass;
34def IIFcmp             : InstrItinClass;
35def IIFadd             : InstrItinClass;
36def IIFmulSingle       : InstrItinClass;
37def IIFmulDouble       : InstrItinClass;
38def IIFdivSingle       : InstrItinClass;
39def IIFdivDouble       : InstrItinClass;
40def IIFsqrtSingle      : InstrItinClass;
41def IIFsqrtDouble      : InstrItinClass;
42def IIFrecipFsqrtStep  : InstrItinClass;
43def IIFLoad            : InstrItinClass;
44def IIFStore           : InstrItinClass;
45def IIFmoveC1          : InstrItinClass;
46def IIPseudo           : InstrItinClass;
47
48//===----------------------------------------------------------------------===//
49// Mips Generic instruction itineraries.
50//===----------------------------------------------------------------------===//
51def MipsGenericItineraries : ProcessorItineraries<[ALU, IMULDIV], [], [
52  InstrItinData<IIAlu              , [InstrStage<1,  [ALU]>]>,
53  InstrItinData<IIArith            , [InstrStage<1,  [ALU]>]>,
54  InstrItinData<IILogic            , [InstrStage<1,  [ALU]>]>,
55  InstrItinData<IILoad             , [InstrStage<3,  [ALU]>]>,
56  InstrItinData<IIStore            , [InstrStage<1,  [ALU]>]>,
57  InstrItinData<IIXfer             , [InstrStage<2,  [ALU]>]>,
58  InstrItinData<IIBranch           , [InstrStage<1,  [ALU]>]>,
59  InstrItinData<IIHiLo             , [InstrStage<1,  [IMULDIV]>]>,
60  InstrItinData<IIImul             , [InstrStage<17, [IMULDIV]>]>,
61  InstrItinData<IIIdiv             , [InstrStage<38, [IMULDIV]>]>,
62  InstrItinData<IIFcvt             , [InstrStage<1,  [ALU]>]>,
63  InstrItinData<IIFmove            , [InstrStage<2,  [ALU]>]>,
64  InstrItinData<IIFcmp             , [InstrStage<3,  [ALU]>]>,
65  InstrItinData<IIFadd             , [InstrStage<4,  [ALU]>]>,
66  InstrItinData<IIFmulSingle       , [InstrStage<7,  [ALU]>]>,
67  InstrItinData<IIFmulDouble       , [InstrStage<8,  [ALU]>]>,
68  InstrItinData<IIFdivSingle       , [InstrStage<23, [ALU]>]>,
69  InstrItinData<IIFdivDouble       , [InstrStage<36, [ALU]>]>,
70  InstrItinData<IIFsqrtSingle      , [InstrStage<54, [ALU]>]>,
71  InstrItinData<IIFsqrtDouble      , [InstrStage<12, [ALU]>]>,
72  InstrItinData<IIFrecipFsqrtStep  , [InstrStage<5,  [ALU]>]>,
73  InstrItinData<IIFLoad            , [InstrStage<3,  [ALU]>]>,
74  InstrItinData<IIFStore           , [InstrStage<1,  [ALU]>]>,
75  InstrItinData<IIFmoveC1          , [InstrStage<2,  [ALU]>]>
76]>;
77