1 //===- HexagonSchedule.td - Hexagon 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 def Hex_FWD : Bypass; 11 def HVX_FWD : Bypass; 12 13 // Functional Units. 14 def SLOT0 : FuncUnit; 15 def SLOT1 : FuncUnit; 16 def SLOT2 : FuncUnit; 17 def SLOT3 : FuncUnit; 18 // Endloop is a pseudo instruction that is encoded with 2 bits in a packet 19 // rather than taking an execution slot. This special unit is needed 20 // to schedule an ENDLOOP with 4 other instructions. 21 def SLOT_ENDLOOP: FuncUnit; 22 23 // CVI pipes from the "Hexagon Multimedia Co-Processor Extensions Arch Spec". 24 def CVI_ST : FuncUnit; 25 def CVI_XLANE : FuncUnit; 26 def CVI_SHIFT : FuncUnit; 27 def CVI_MPY0 : FuncUnit; 28 def CVI_MPY1 : FuncUnit; 29 def CVI_LD : FuncUnit; 30 31 // Combined functional units. 32 def CVI_XLSHF : FuncUnit; 33 def CVI_MPY01 : FuncUnit; 34 def CVI_ALL : FuncUnit; 35 def CVI_ALL_NOMEM : FuncUnit; 36 37 // Combined functional unit data. 38 def 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. 48 def PSEUDO : InstrItinClass; 49 def PSEUDOM : InstrItinClass; 50 def DUPLEX : InstrItinClass; 51 def tc_ENDLOOP : InstrItinClass; 52 53 //===----------------------------------------------------------------------===// 54 // Auto-generated itinerary classes 55 //===----------------------------------------------------------------------===// 56 include "HexagonDepIICScalar.td" 57 include "HexagonDepIICHVX.td" 58 59 //===----------------------------------------------------------------------===// 60 // V4 Machine Info + 61 //===----------------------------------------------------------------------===// 62 63 include "HexagonScheduleV4.td" 64 65 // V55 Machine Info + 66 include "HexagonScheduleV55.td" 67 68 //===----------------------------------------------------------------------===// 69 // V60 Machine Info - 70 //===----------------------------------------------------------------------===// 71 72 include "HexagonIICScalar.td" 73 include "HexagonIICHVX.td" 74 include "HexagonScheduleV60.td" 75 76 //===----------------------------------------------------------------------===// 77 // V62 Machine Info + 78 //===----------------------------------------------------------------------===// 79 80 include "HexagonScheduleV62.td" 81 82 //===----------------------------------------------------------------------===// 83 // V65 Machine Info + 84 //===----------------------------------------------------------------------===// 85 86 include "HexagonScheduleV65.td" 87