Home | History | Annotate | Download | only in Hexagon
      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