| //===- HexagonSchedule.td - Hexagon Scheduling Definitions -*- tablegen -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // Functional Units |
| def LSUNIT : FuncUnit; // SLOT0 |
| def LUNIT : FuncUnit; // SLOT1 |
| def MUNIT : FuncUnit; // SLOT2 |
| def SUNIT : FuncUnit; // SLOT3 |
| def LOOPUNIT : FuncUnit; |
| |
| // Itinerary classes |
| def ALU32 : InstrItinClass; |
| def ALU64 : InstrItinClass; |
| def CR : InstrItinClass; |
| def J : InstrItinClass; |
| def JR : InstrItinClass; |
| def LD : InstrItinClass; |
| def LD0 : InstrItinClass; |
| def M : InstrItinClass; |
| def ST : InstrItinClass; |
| def ST0 : InstrItinClass; |
| def S : InstrItinClass; |
| def SYS : InstrItinClass; |
| def ENDLOOP : InstrItinClass; |
| def PSEUDO : InstrItinClass; |
| def PSEUDOM : InstrItinClass; |
| |
| def HexagonItineraries : |
| ProcessorItineraries<[LSUNIT, LUNIT, MUNIT, SUNIT, LOOPUNIT], [], [ |
| InstrItinData<ALU32 , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>, |
| InstrItinData<ALU64 , [InstrStage<1, [MUNIT, SUNIT]>]>, |
| InstrItinData<CR , [InstrStage<1, [SUNIT]>]>, |
| InstrItinData<J , [InstrStage<1, [SUNIT, MUNIT]>]>, |
| InstrItinData<JR , [InstrStage<1, [MUNIT]>]>, |
| InstrItinData<LD , [InstrStage<1, [LUNIT, LSUNIT]>]>, |
| InstrItinData<LD0 , [InstrStage<1, [LSUNIT]>]>, |
| InstrItinData<M , [InstrStage<1, [MUNIT, SUNIT]>]>, |
| InstrItinData<ST , [InstrStage<1, [LSUNIT]>]>, |
| InstrItinData<ST0 , [InstrStage<1, [LSUNIT]>]>, |
| InstrItinData<S , [InstrStage<1, [SUNIT, MUNIT]>]>, |
| InstrItinData<SYS , [InstrStage<1, [LSUNIT]>]>, |
| InstrItinData<ENDLOOP, [InstrStage<1, [LOOPUNIT]>]>, |
| InstrItinData<PSEUDO , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>, |
| InstrItinData<PSEUDOM, [InstrStage<1, [MUNIT, SUNIT], 0>, |
| InstrStage<1, [MUNIT, SUNIT]>]> |
| ]>; |
| |
| def HexagonModel : SchedMachineModel { |
| // Max issue per cycle == bundle width. |
| let IssueWidth = 4; |
| let Itineraries = HexagonItineraries; |
| let LoadLatency = 1; |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // V4 Machine Info + |
| //===----------------------------------------------------------------------===// |
| |
| include "HexagonScheduleV4.td" |
| |
| //===----------------------------------------------------------------------===// |
| // V4 Machine Info - |
| //===----------------------------------------------------------------------===// |