1//===- HexagonSchedule.td - Hexagon Scheduling Definitions -*- tablegen -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9def Hex_FWD : Bypass;
10def HVX_FWD : Bypass;
11
12// Functional Units.
13def SLOT0       : FuncUnit;
14def SLOT1       : FuncUnit;
15def SLOT2       : FuncUnit;
16def SLOT3       : FuncUnit;
17// Endloop is a pseudo instruction that is encoded with 2 bits in a packet
18// rather than taking an execution slot. This special unit is needed
19// to schedule an ENDLOOP with 4 other instructions.
20def SLOT_ENDLOOP: FuncUnit;
21
22// CVI pipes from the "Hexagon Multimedia Co-Processor Extensions Arch Spec".
23def CVI_ST     : FuncUnit;
24def CVI_XLANE  : FuncUnit;
25def CVI_SHIFT  : FuncUnit;
26def CVI_MPY0   : FuncUnit;
27def CVI_MPY1   : FuncUnit;
28def CVI_LD     : FuncUnit;
29def CVI_ZW     : FuncUnit; // Z register write port
30
31// Combined functional units.
32def CVI_XLSHF  : FuncUnit;
33def CVI_MPY01  : FuncUnit;
34def CVI_ALL    : FuncUnit;
35def CVI_ALL_NOMEM : FuncUnit;
36
37// Combined functional unit data.
38def HexagonComboFuncsV60 :
39    ComboFuncUnits<[
40      ComboFuncData<CVI_XLSHF    , [CVI_XLANE, CVI_SHIFT]>,
41      ComboFuncData<CVI_MPY01    , [CVI_MPY0, CVI_MPY1]>,
42      ComboFuncData<CVI_ALL      , [CVI_ST, CVI_XLANE, CVI_SHIFT,
43                                    CVI_MPY0, CVI_MPY1, CVI_LD]>,
44      ComboFuncData<CVI_ALL_NOMEM, [CVI_XLANE, CVI_SHIFT, CVI_MPY0, CVI_MPY1]>
45    ]>;
46
47// Itinerary classes.
48def PSEUDO          : InstrItinClass;
49def PSEUDOM         : InstrItinClass;
50def DUPLEX          : InstrItinClass;
51def tc_ENDLOOP      : InstrItinClass;
52
53//===----------------------------------------------------------------------===//
54// Auto-generated itinerary classes
55//===----------------------------------------------------------------------===//
56include "HexagonDepIICScalar.td"
57include "HexagonDepIICHVX.td"
58
59include "HexagonScheduleV5.td"
60include "HexagonScheduleV55.td"
61
62include "HexagonIICScalar.td"
63include "HexagonIICHVX.td"
64include "HexagonScheduleV60.td"
65
66include "HexagonScheduleV62.td"
67include "HexagonScheduleV65.td"
68include "HexagonScheduleV66.td"
69include "HexagonScheduleV67.td"
70include "HexagonScheduleV67T.td"
71include "HexagonScheduleV68.td"
72include "HexagonScheduleV69.td"
73