reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
//===- HexagonSchedule.td - Hexagon Scheduling Definitions -*- tablegen -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

def Hex_FWD : Bypass;
def HVX_FWD : Bypass;

// Functional Units.
def SLOT0       : FuncUnit;
def SLOT1       : FuncUnit;
def SLOT2       : FuncUnit;
def SLOT3       : FuncUnit;
// Endloop is a pseudo instruction that is encoded with 2 bits in a packet
// rather than taking an execution slot. This special unit is needed
// to schedule an ENDLOOP with 4 other instructions.
def SLOT_ENDLOOP: FuncUnit;

// CVI pipes from the "Hexagon Multimedia Co-Processor Extensions Arch Spec".
def CVI_ST     : FuncUnit;
def CVI_XLANE  : FuncUnit;
def CVI_SHIFT  : FuncUnit;
def CVI_MPY0   : FuncUnit;
def CVI_MPY1   : FuncUnit;
def CVI_LD     : FuncUnit;
def CVI_ZW     : FuncUnit; // Z register write port

// Combined functional units.
def CVI_XLSHF  : FuncUnit;
def CVI_MPY01  : FuncUnit;
def CVI_ALL    : FuncUnit;
def CVI_ALL_NOMEM : FuncUnit;

// Combined functional unit data.
def HexagonComboFuncsV60 :
    ComboFuncUnits<[
      ComboFuncData<CVI_XLSHF    , [CVI_XLANE, CVI_SHIFT]>,
      ComboFuncData<CVI_MPY01    , [CVI_MPY0, CVI_MPY1]>,
      ComboFuncData<CVI_ALL      , [CVI_ST, CVI_XLANE, CVI_SHIFT,
                                    CVI_MPY0, CVI_MPY1, CVI_LD]>,
      ComboFuncData<CVI_ALL_NOMEM, [CVI_XLANE, CVI_SHIFT, CVI_MPY0, CVI_MPY1]>
    ]>;

// Itinerary classes.
def PSEUDO          : InstrItinClass;
def PSEUDOM         : InstrItinClass;
def DUPLEX          : InstrItinClass;
def tc_ENDLOOP      : InstrItinClass;

//===----------------------------------------------------------------------===//
// Auto-generated itinerary classes
//===----------------------------------------------------------------------===//
include "HexagonDepIICScalar.td"
include "HexagonDepIICHVX.td"

//===----------------------------------------------------------------------===//
// V5 Machine Info +
//===----------------------------------------------------------------------===//

include "HexagonScheduleV5.td"

// V55 Machine Info +
include "HexagonScheduleV55.td"

//===----------------------------------------------------------------------===//
// V60 Machine Info -
//===----------------------------------------------------------------------===//

include "HexagonIICScalar.td"
include "HexagonIICHVX.td"
include "HexagonScheduleV60.td"

//===----------------------------------------------------------------------===//
// V62 Machine Info +
//===----------------------------------------------------------------------===//

include "HexagonScheduleV62.td"

//===----------------------------------------------------------------------===//
// V65 Machine Info +
//===----------------------------------------------------------------------===//

include "HexagonScheduleV65.td"

//===----------------------------------------------------------------------===//
// V66 Machine Info +
//===----------------------------------------------------------------------===//

include "HexagonScheduleV66.td"