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"
71