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 // Functional Units
     11 def LSUNIT    : FuncUnit; // SLOT0
     12 def LUNIT     : FuncUnit; // SLOT1
     13 def MUNIT     : FuncUnit; // SLOT2
     14 def SUNIT     : FuncUnit; // SLOT3
     15 def LOOPUNIT  : FuncUnit;
     16 
     17 // Itinerary classes
     18 def ALU32     : InstrItinClass;
     19 def ALU64     : InstrItinClass;
     20 def CR        : InstrItinClass;
     21 def J         : InstrItinClass;
     22 def JR        : InstrItinClass;
     23 def LD        : InstrItinClass;
     24 def LD0       : InstrItinClass;
     25 def M         : InstrItinClass;
     26 def ST        : InstrItinClass;
     27 def ST0       : InstrItinClass;
     28 def S         : InstrItinClass;
     29 def SYS       : InstrItinClass;
     30 def ENDLOOP   : InstrItinClass;
     31 def PSEUDO    : InstrItinClass;
     32 def PSEUDOM   : InstrItinClass;
     33 
     34 def HexagonItineraries :
     35       ProcessorItineraries<[LSUNIT, LUNIT, MUNIT, SUNIT, LOOPUNIT], [], [
     36         InstrItinData<ALU32  , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
     37         InstrItinData<ALU64  , [InstrStage<1, [MUNIT, SUNIT]>]>,
     38         InstrItinData<CR     , [InstrStage<1, [SUNIT]>]>,
     39         InstrItinData<J      , [InstrStage<1, [SUNIT, MUNIT]>]>,
     40         InstrItinData<JR     , [InstrStage<1, [MUNIT]>]>,
     41         InstrItinData<LD     , [InstrStage<1, [LUNIT, LSUNIT]>]>,
     42         InstrItinData<LD0    , [InstrStage<1, [LSUNIT]>]>,
     43         InstrItinData<M      , [InstrStage<1, [MUNIT, SUNIT]>]>,
     44         InstrItinData<ST     , [InstrStage<1, [LSUNIT]>]>,
     45         InstrItinData<ST0    , [InstrStage<1, [LSUNIT]>]>,
     46         InstrItinData<S      , [InstrStage<1, [SUNIT, MUNIT]>]>,
     47         InstrItinData<SYS    , [InstrStage<1, [LSUNIT]>]>,
     48         InstrItinData<ENDLOOP, [InstrStage<1, [LOOPUNIT]>]>,
     49         InstrItinData<PSEUDO , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
     50         InstrItinData<PSEUDOM, [InstrStage<1, [MUNIT, SUNIT], 0>,
     51                                 InstrStage<1, [MUNIT, SUNIT]>]>
     52       ]>;
     53 
     54 def HexagonModel : SchedMachineModel {
     55   // Max issue per cycle == bundle width.
     56   let IssueWidth = 4;
     57   let Itineraries = HexagonItineraries;
     58   let LoadLatency = 1;
     59 }
     60 
     61 //===----------------------------------------------------------------------===//
     62 // V4 Machine Info +
     63 //===----------------------------------------------------------------------===//
     64 
     65 include "HexagonScheduleV4.td"
     66 
     67 //===----------------------------------------------------------------------===//
     68 // V4 Machine Info -
     69 //===----------------------------------------------------------------------===//
     70