]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/llvm/lib/Target/Hexagon/HexagonSchedule.td
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / llvm / lib / Target / Hexagon / HexagonSchedule.td
1 //===- HexagonSchedule.td - Hexagon 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 // Functional Units
11 def LSUNIT    : FuncUnit; // SLOT0
12 def LUNIT     : FuncUnit; // SLOT1
13 def MUNIT     : FuncUnit; // SLOT2
14 def SUNIT     : FuncUnit; // SLOT3
15 def LOOPUNIT  : FuncUnit;
16
17 // Itinerary classes
18 def ALU32     : InstrItinClass;
19 def ALU64     : InstrItinClass;
20 def CR        : InstrItinClass;
21 def J         : InstrItinClass;
22 def JR        : InstrItinClass;
23 def LD        : InstrItinClass;
24 def LD0       : InstrItinClass;
25 def M         : InstrItinClass;
26 def ST        : InstrItinClass;
27 def ST0       : InstrItinClass;
28 def S         : InstrItinClass;
29 def SYS       : InstrItinClass;
30 def ENDLOOP   : InstrItinClass;
31 def PSEUDO    : InstrItinClass;
32 def PSEUDOM   : InstrItinClass;
33
34 def HexagonItineraries :
35       ProcessorItineraries<[LSUNIT, LUNIT, MUNIT, SUNIT, LOOPUNIT], [], [
36         InstrItinData<ALU32  , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
37         InstrItinData<ALU64  , [InstrStage<1, [MUNIT, SUNIT]>]>,
38         InstrItinData<CR     , [InstrStage<1, [SUNIT]>]>,
39         InstrItinData<J      , [InstrStage<1, [SUNIT, MUNIT]>]>,
40         InstrItinData<JR     , [InstrStage<1, [MUNIT]>]>,
41         InstrItinData<LD     , [InstrStage<1, [LUNIT, LSUNIT]>]>,
42         InstrItinData<LD0    , [InstrStage<1, [LSUNIT]>]>,
43         InstrItinData<M      , [InstrStage<1, [MUNIT, SUNIT]>]>,
44         InstrItinData<ST     , [InstrStage<1, [LSUNIT]>]>,
45         InstrItinData<ST0    , [InstrStage<1, [LSUNIT]>]>,
46         InstrItinData<S      , [InstrStage<1, [SUNIT, MUNIT]>]>,
47         InstrItinData<SYS    , [InstrStage<1, [LSUNIT]>]>,
48         InstrItinData<ENDLOOP, [InstrStage<1, [LOOPUNIT]>]>,
49         InstrItinData<PSEUDO , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
50         InstrItinData<PSEUDOM, [InstrStage<1, [MUNIT, SUNIT], 0>,
51                                 InstrStage<1, [MUNIT, SUNIT]>]>
52       ]>;
53
54 def HexagonModel : SchedMachineModel {
55   // Max issue per cycle == bundle width.
56   let IssueWidth = 4;
57   let Itineraries = HexagonItineraries;
58   let LoadLatency = 1;
59 }
60
61 //===----------------------------------------------------------------------===//
62 // V4 Machine Info +
63 //===----------------------------------------------------------------------===//
64
65 include "HexagonScheduleV4.td"
66
67 //===----------------------------------------------------------------------===//
68 // V4 Machine Info -
69 //===----------------------------------------------------------------------===//