| //=-HexagonScheduleV4.td - HexagonV4 Scheduling Definitions --*- tablegen -*-=// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // There are four SLOTS (four parallel pipelines) in Hexagon V4 machine. |
| // This file describes that machine information. |
| |
| // |
| // |===========|==================================================| |
| // | PIPELINE | Instruction Classes | |
| // |===========|==================================================| |
| // | SLOT0 | LD ST ALU32 MEMOP NV SYSTEM | |
| // |-----------|--------------------------------------------------| |
| // | SLOT1 | LD ST ALU32 | |
| // |-----------|--------------------------------------------------| |
| // | SLOT2 | XTYPE ALU32 J JR | |
| // |-----------|--------------------------------------------------| |
| // | SLOT3 | XTYPE ALU32 J CR | |
| // |===========|==================================================| |
| |
| // 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; |
| |
| // Itinerary classes. |
| def NV_V4 : InstrItinClass; |
| def MEM_V4 : InstrItinClass; |
| // ALU64/M/S Instruction classes of V2 are collectively knownn as XTYPE in V4. |
| def PREFIX : InstrItinClass; |
| |
| def HexagonItinerariesV4 : |
| ProcessorItineraries<[SLOT0, SLOT1, SLOT2, SLOT3, SLOT_ENDLOOP], [], [ |
| InstrItinData<ALU32 , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>, |
| InstrItinData<ALU64 , [InstrStage<1, [SLOT2, SLOT3]>]>, |
| InstrItinData<CR , [InstrStage<1, [SLOT3]>]>, |
| InstrItinData<J , [InstrStage<1, [SLOT2, SLOT3]>]>, |
| InstrItinData<JR , [InstrStage<1, [SLOT2]>]>, |
| InstrItinData<LD , [InstrStage<1, [SLOT0, SLOT1]>]>, |
| InstrItinData<LD0 , [InstrStage<1, [SLOT0]>]>, |
| InstrItinData<M , [InstrStage<1, [SLOT2, SLOT3]>]>, |
| InstrItinData<ST , [InstrStage<1, [SLOT0, SLOT1]>]>, |
| InstrItinData<ST0 , [InstrStage<1, [SLOT0]>]>, |
| InstrItinData<S , [InstrStage<1, [SLOT2, SLOT3]>]>, |
| InstrItinData<SYS , [InstrStage<1, [SLOT0]>]>, |
| InstrItinData<NV_V4 , [InstrStage<1, [SLOT0]>]>, |
| InstrItinData<MEM_V4 , [InstrStage<1, [SLOT0]>]>, |
| InstrItinData<ENDLOOP, [InstrStage<1, [SLOT_ENDLOOP]>]>, |
| InstrItinData<PREFIX , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>, |
| InstrItinData<PSEUDO , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>, |
| InstrItinData<PSEUDOM, [InstrStage<1, [SLOT2, SLOT3], 0>, |
| InstrStage<1, [SLOT2, SLOT3]>]> |
| ]>; |
| |
| def HexagonModelV4 : SchedMachineModel { |
| // Max issue per cycle == bundle width. |
| let IssueWidth = 4; |
| let Itineraries = HexagonItinerariesV4; |
| let LoadLatency = 1; |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // Hexagon V4 Resource Definitions - |
| //===----------------------------------------------------------------------===// |