OSDN Git Service

Update aosp/master LLVM for rebase to r256229
[android-x86/external-llvm.git] / lib / Target / Hexagon / HexagonScheduleV55.td
1 //=-HexagonScheduleV4.td - HexagonV4 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 // There are four SLOTS (four parallel pipelines) in Hexagon V4 machine.
11 // This file describes that machine information.
12
13 //
14 //    |===========|==================================================|
15 //    | PIPELINE  |              Instruction Classes                 |
16 //    |===========|==================================================|
17 //    | SLOT0     |  LD       ST    ALU32     MEMOP     NV    SYSTEM |
18 //    |-----------|--------------------------------------------------|
19 //    | SLOT1     |  LD       ST    ALU32                            |
20 //    |-----------|--------------------------------------------------|
21 //    | SLOT2     |  XTYPE          ALU32     J         JR           |
22 //    |-----------|--------------------------------------------------|
23 //    | SLOT3     |  XTYPE          ALU32     J         CR           |
24 //    |===========|==================================================|
25
26 def CJ_tc_1_SLOT23              : InstrItinClass;
27 def CJ_tc_2early_SLOT23         : InstrItinClass;
28 def COPROC_VMEM_vtc_long_SLOT01 : InstrItinClass;
29 def COPROC_VX_vtc_long_SLOT23   : InstrItinClass;
30 def COPROC_VX_vtc_SLOT23        : InstrItinClass;
31 def J_tc_3stall_SLOT2           : InstrItinClass;
32 def MAPPING_tc_1_SLOT0123       : InstrItinClass;
33 def M_tc_3stall_SLOT23          : InstrItinClass;
34 def SUBINSN_tc_1_SLOT01         : InstrItinClass;
35 def SUBINSN_tc_2early_SLOT0     : InstrItinClass;
36 def SUBINSN_tc_2early_SLOT01    : InstrItinClass;
37 def SUBINSN_tc_3stall_SLOT0     : InstrItinClass;
38 def SUBINSN_tc_ld_SLOT0         : InstrItinClass;
39 def SUBINSN_tc_ld_SLOT01        : InstrItinClass;
40 def SUBINSN_tc_st_SLOT01        : InstrItinClass;
41
42 def HexagonItinerariesV55 :
43       ProcessorItineraries<[SLOT0, SLOT1, SLOT2, SLOT3, SLOT_ENDLOOP], [], [
44         // ALU32
45         InstrItinData<ALU32_2op_tc_1_SLOT0123     ,
46                       [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
47         InstrItinData<ALU32_2op_tc_2early_SLOT0123,
48                       [InstrStage<2, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
49         InstrItinData<ALU32_3op_tc_1_SLOT0123     ,
50                       [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
51         InstrItinData<ALU32_3op_tc_2_SLOT0123     ,
52                       [InstrStage<2, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
53         InstrItinData<ALU32_3op_tc_2early_SLOT0123,
54                       [InstrStage<2, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
55         InstrItinData<ALU32_ADDI_tc_1_SLOT0123    ,
56                       [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
57
58         // ALU64
59         InstrItinData<ALU64_tc_1_SLOT23     , [InstrStage<1, [SLOT2, SLOT3]>]>,
60         InstrItinData<ALU64_tc_2_SLOT23     , [InstrStage<2, [SLOT2, SLOT3]>]>,
61         InstrItinData<ALU64_tc_2early_SLOT23, [InstrStage<2, [SLOT2, SLOT3]>]>,
62         InstrItinData<ALU64_tc_3x_SLOT23    , [InstrStage<3, [SLOT2, SLOT3]>]>,
63
64         // CR -> System
65         InstrItinData<CR_tc_2_SLOT3      , [InstrStage<2, [SLOT3]>]>,
66         InstrItinData<CR_tc_2early_SLOT3 , [InstrStage<2, [SLOT3]>]>,
67         InstrItinData<CR_tc_3x_SLOT3     , [InstrStage<3, [SLOT3]>]>,
68
69         // Jump (conditional/unconditional/return etc)
70         InstrItinData<CR_tc_2early_SLOT23, [InstrStage<2, [SLOT2, SLOT3]>]>,
71         InstrItinData<CR_tc_3x_SLOT23    , [InstrStage<3, [SLOT2, SLOT3]>]>,
72         InstrItinData<CJ_tc_1_SLOT23     , [InstrStage<1, [SLOT2, SLOT3]>]>,
73         InstrItinData<CJ_tc_2early_SLOT23, [InstrStage<2, [SLOT2, SLOT3]>]>,
74         InstrItinData<J_tc_2early_SLOT23 , [InstrStage<2, [SLOT2, SLOT3]>]>,
75         InstrItinData<J_tc_2early_CJUMP_UCJUMP_ARCHDEPSLOT     , [InstrStage<1, [SLOT2, SLOT3]>]>,
76
77         // JR
78         InstrItinData<J_tc_2early_SLOT2  , [InstrStage<2, [SLOT2]>]>,
79         InstrItinData<J_tc_3stall_SLOT2  , [InstrStage<3, [SLOT2]>]>,
80
81         // Extender
82         InstrItinData<EXTENDER_tc_1_SLOT0123,
83                       [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
84
85         // Load
86         InstrItinData<LD_tc_ld_SLOT01      , [InstrStage<3, [SLOT0, SLOT1]>]>,
87         InstrItinData<LD_tc_3or4stall_SLOT0, [InstrStage<3, [SLOT0]>]>,
88         InstrItinData<LD_tc_ld_SLOT0       , [InstrStage<3, [SLOT0]>]>,
89
90         // M
91         InstrItinData<M_tc_1_SLOT23     , [InstrStage<1, [SLOT2, SLOT3]>]>,
92         InstrItinData<M_tc_2_SLOT23     , [InstrStage<2, [SLOT2, SLOT3]>]>,
93         InstrItinData<M_tc_3_SLOT23     , [InstrStage<3, [SLOT2, SLOT3]>]>,
94         InstrItinData<M_tc_3x_SLOT23    , [InstrStage<3, [SLOT2, SLOT3]>]>,
95         InstrItinData<M_tc_3or4x_SLOT23 , [InstrStage<3, [SLOT2, SLOT3]>]>,
96         InstrItinData<M_tc_3stall_SLOT23, [InstrStage<3, [SLOT2, SLOT3]>]>,
97
98         // Store
99         InstrItinData<ST_tc_st_SLOT01   , [InstrStage<1, [SLOT0, SLOT1]>]>,
100         InstrItinData<ST_tc_3stall_SLOT0, [InstrStage<3, [SLOT0]>]>,
101         InstrItinData<ST_tc_ld_SLOT0    , [InstrStage<3, [SLOT0]>]>,
102         InstrItinData<ST_tc_st_SLOT0    , [InstrStage<1, [SLOT0]>]>,
103
104         // Subinsn
105         InstrItinData<SUBINSN_tc_2early_SLOT0, [InstrStage<2, [SLOT0]>]>,
106         InstrItinData<SUBINSN_tc_3stall_SLOT0, [InstrStage<3, [SLOT0]>]>,
107         InstrItinData<SUBINSN_tc_ld_SLOT0    , [InstrStage<3, [SLOT0]>]>,
108         InstrItinData<SUBINSN_tc_1_SLOT01    , [InstrStage<1, [SLOT0, SLOT1]>]>,
109         InstrItinData<SUBINSN_tc_2early_SLOT01,
110                               [InstrStage<2, [SLOT0, SLOT1]>]>,
111         InstrItinData<SUBINSN_tc_ld_SLOT01   , [InstrStage<3, [SLOT0, SLOT1]>]>,
112         InstrItinData<SUBINSN_tc_st_SLOT01   , [InstrStage<1, [SLOT0, SLOT1]>]>,
113
114         // S
115         InstrItinData<S_2op_tc_1_SLOT23     , [InstrStage<1, [SLOT2, SLOT3]>]>,
116         InstrItinData<S_2op_tc_2_SLOT23     , [InstrStage<2, [SLOT2, SLOT3]>]>,
117         InstrItinData<S_2op_tc_2early_SLOT23, [InstrStage<2, [SLOT2, SLOT3]>]>,
118         InstrItinData<S_2op_tc_3or4x_SLOT23 , [InstrStage<3, [SLOT2, SLOT3]>]>,
119         InstrItinData<S_3op_tc_1_SLOT23     , [InstrStage<1, [SLOT2, SLOT3]>]>,
120         InstrItinData<S_3op_tc_2_SLOT23     , [InstrStage<2, [SLOT2, SLOT3]>]>,
121         InstrItinData<S_3op_tc_2early_SLOT23, [InstrStage<2, [SLOT2, SLOT3]>]>,
122         InstrItinData<S_3op_tc_3_SLOT23     , [InstrStage<3, [SLOT2, SLOT3]>]>,
123         InstrItinData<S_3op_tc_3stall_SLOT23, [InstrStage<3, [SLOT2, SLOT3]>]>,
124         InstrItinData<S_3op_tc_3x_SLOT23    , [InstrStage<3, [SLOT2, SLOT3]>]>,
125
126         // New Value Compare Jump
127         InstrItinData<NCJ_tc_3or4stall_SLOT0, [InstrStage<3, [SLOT0]>]>,
128
129         // Mem ops
130         InstrItinData<V2LDST_tc_st_SLOT0  , [InstrStage<1, [SLOT0]>]>,
131         InstrItinData<V2LDST_tc_ld_SLOT01 , [InstrStage<2, [SLOT0, SLOT1]>]>,
132         InstrItinData<V2LDST_tc_st_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
133         InstrItinData<V4LDST_tc_st_SLOT0  , [InstrStage<1, [SLOT0]>]>,
134         InstrItinData<V4LDST_tc_ld_SLOT01 , [InstrStage<3, [SLOT0, SLOT1]>]>,
135         InstrItinData<V4LDST_tc_st_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
136
137         // Endloop
138         InstrItinData<J_tc_2early_SLOT0123, [InstrStage<2, [SLOT_ENDLOOP]>]>,
139
140         // Vector
141         InstrItinData<COPROC_VMEM_vtc_long_SLOT01,
142                       [InstrStage<3, [SLOT0, SLOT1]>]>,
143         InstrItinData<COPROC_VX_vtc_long_SLOT23  ,
144                       [InstrStage<3, [SLOT2, SLOT3]>]>,
145         InstrItinData<COPROC_VX_vtc_SLOT23 ,
146                       [InstrStage<3, [SLOT2, SLOT3]>]>,
147         InstrItinData<MAPPING_tc_1_SLOT0123      ,
148                       [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
149
150         // Misc
151         InstrItinData<COMPOUND_CJ_ARCHDEPSLOT , [InstrStage<1, [SLOT2, SLOT3]>]>,
152         InstrItinData<COMPOUND , [InstrStage<1, [SLOT2, SLOT3]>]>,
153         InstrItinData<DUPLEX , [InstrStage<1, [SLOT0]>]>,
154         InstrItinData<PREFIX , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
155         InstrItinData<PSEUDO , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
156         InstrItinData<PSEUDOM, [InstrStage<1, [SLOT2, SLOT3], 0>,
157                                 InstrStage<1, [SLOT2, SLOT3]>]>
158
159       ]>;
160
161 def HexagonModelV55 : SchedMachineModel {
162   // Max issue per cycle == bundle width.
163   let IssueWidth = 4;
164   let Itineraries = HexagonItinerariesV55;
165   let LoadLatency = 1;
166 }
167
168 //===----------------------------------------------------------------------===//
169 // Hexagon V4 Resource Definitions -
170 //===----------------------------------------------------------------------===//