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