xref: /freebsd/contrib/llvm-project/llvm/lib/Target/Hexagon/HexagonSchedule.td (revision 62cfcf62f627e5093fb37026a6d8c98e4d2ef04c)
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
59//===----------------------------------------------------------------------===//
60// V5 Machine Info +
61//===----------------------------------------------------------------------===//
62
63include "HexagonScheduleV5.td"
64
65// V55 Machine Info +
66include "HexagonScheduleV55.td"
67
68//===----------------------------------------------------------------------===//
69// V60 Machine Info -
70//===----------------------------------------------------------------------===//
71
72include "HexagonIICScalar.td"
73include "HexagonIICHVX.td"
74include "HexagonScheduleV60.td"
75
76//===----------------------------------------------------------------------===//
77// V62 Machine Info +
78//===----------------------------------------------------------------------===//
79
80include "HexagonScheduleV62.td"
81
82//===----------------------------------------------------------------------===//
83// V65 Machine Info +
84//===----------------------------------------------------------------------===//
85
86include "HexagonScheduleV65.td"
87
88//===----------------------------------------------------------------------===//
89// V66 Machine Info +
90//===----------------------------------------------------------------------===//
91
92include "HexagonScheduleV66.td"
93