2012-02-18 20:03:15 +08:00
|
|
|
//===- HexagonSchedule.td - Hexagon Scheduling Definitions -*- tablegen -*-===//
|
2011-12-13 05:14:40 +08:00
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
// Functional Units
|
2013-02-15 03:57:17 +08:00
|
|
|
def LSUNIT : FuncUnit; // SLOT0
|
|
|
|
def LUNIT : FuncUnit; // SLOT1
|
|
|
|
def MUNIT : FuncUnit; // SLOT2
|
|
|
|
def SUNIT : FuncUnit; // SLOT3
|
|
|
|
def LOOPUNIT : FuncUnit;
|
2011-12-13 05:14:40 +08:00
|
|
|
|
|
|
|
// Itinerary classes
|
|
|
|
def ALU32 : InstrItinClass;
|
|
|
|
def ALU64 : InstrItinClass;
|
|
|
|
def CR : InstrItinClass;
|
|
|
|
def J : InstrItinClass;
|
|
|
|
def JR : InstrItinClass;
|
|
|
|
def LD : InstrItinClass;
|
2013-02-15 03:57:17 +08:00
|
|
|
def LD0 : InstrItinClass;
|
2011-12-13 05:14:40 +08:00
|
|
|
def M : InstrItinClass;
|
|
|
|
def ST : InstrItinClass;
|
2013-02-15 03:57:17 +08:00
|
|
|
def ST0 : InstrItinClass;
|
2011-12-13 05:14:40 +08:00
|
|
|
def S : InstrItinClass;
|
2012-05-04 00:18:50 +08:00
|
|
|
def SYS : InstrItinClass;
|
2013-02-15 03:57:17 +08:00
|
|
|
def ENDLOOP : InstrItinClass;
|
2011-12-13 05:14:40 +08:00
|
|
|
def PSEUDO : InstrItinClass;
|
2013-02-15 03:57:17 +08:00
|
|
|
def PSEUDOM : InstrItinClass;
|
2011-12-13 05:14:40 +08:00
|
|
|
|
|
|
|
def HexagonItineraries :
|
2013-02-15 03:57:17 +08:00
|
|
|
ProcessorItineraries<[LSUNIT, LUNIT, MUNIT, SUNIT, LOOPUNIT], [], [
|
2012-05-04 00:18:50 +08:00
|
|
|
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]>]>,
|
2013-02-15 03:57:17 +08:00
|
|
|
InstrItinData<LD0 , [InstrStage<1, [LSUNIT]>]>,
|
2012-05-04 00:18:50 +08:00
|
|
|
InstrItinData<M , [InstrStage<1, [MUNIT, SUNIT]>]>,
|
|
|
|
InstrItinData<ST , [InstrStage<1, [LSUNIT]>]>,
|
2013-02-15 03:57:17 +08:00
|
|
|
InstrItinData<ST0 , [InstrStage<1, [LSUNIT]>]>,
|
2012-05-04 00:18:50 +08:00
|
|
|
InstrItinData<S , [InstrStage<1, [SUNIT, MUNIT]>]>,
|
|
|
|
InstrItinData<SYS , [InstrStage<1, [LSUNIT]>]>,
|
2013-02-15 03:57:17 +08:00
|
|
|
InstrItinData<ENDLOOP, [InstrStage<1, [LOOPUNIT]>]>,
|
|
|
|
InstrItinData<PSEUDO , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
|
|
|
|
InstrItinData<PSEUDOM, [InstrStage<1, [MUNIT, SUNIT], 0>,
|
|
|
|
InstrStage<1, [MUNIT, SUNIT]>]>
|
2012-07-07 12:00:00 +08:00
|
|
|
]>;
|
|
|
|
|
|
|
|
def HexagonModel : SchedMachineModel {
|
2012-06-05 11:44:40 +08:00
|
|
|
// Max issue per cycle == bundle width.
|
|
|
|
let IssueWidth = 4;
|
2012-07-07 12:00:00 +08:00
|
|
|
let Itineraries = HexagonItineraries;
|
2012-09-04 22:49:56 +08:00
|
|
|
let LoadLatency = 1;
|
2012-06-05 11:44:40 +08:00
|
|
|
}
|
2011-12-13 05:14:40 +08:00
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// V4 Machine Info +
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
include "HexagonScheduleV4.td"
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// V4 Machine Info -
|
|
|
|
//===----------------------------------------------------------------------===//
|