aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/AArch64/AArch64Schedule.td
blob: ec8450b9c1fc9f4f0897784a9ef75ce5616c58bb (plain)
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
//===- AArch64Schedule.td - AArch64 Scheduling Definitions -*- tablegen -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

//===----------------------------------------------------------------------===//
// Generic processor itineraries for legacy compatibility.

def GenericItineraries : ProcessorItineraries<[], [], []>;


//===----------------------------------------------------------------------===//
// Base SchedReadWrite types

// Basic ALU
def WriteALU : SchedWrite;  // Generic: may contain shift and/or ALU operation
def WriteALUs : SchedWrite; // Shift only with no ALU operation
def ReadALU : SchedRead;    // Operand not needed for shifting
def ReadALUs : SchedRead;   // Operand needed for shifting

// Multiply with optional accumulate
def WriteMAC : SchedWrite;
def ReadMAC : SchedRead;

// Compares
def WriteCMP : SchedWrite;
def ReadCMP : SchedRead;

// Division
def WriteDiv : SchedWrite;
def ReadDiv : SchedRead;

// Loads
def WriteLd : SchedWrite;
def WritePreLd : SchedWrite;
def WriteVecLd : SchedWrite;
def ReadLd : SchedRead;
def ReadPreLd : SchedRead;
def ReadVecLd : SchedRead;

// Stores
def WriteSt : SchedWrite;
def WriteVecSt : SchedWrite;
def ReadSt : SchedRead;
def ReadVecSt : SchedRead;

// Branches
def WriteBr : SchedWrite;
def WriteBrL : SchedWrite;
def ReadBr : SchedRead;

// Floating Point ALU
def WriteFPALU : SchedWrite;
def ReadFPALU : SchedRead;

// Floating Point MAC, Mul, Div, Sqrt
//   Most processors will simply send all of these down a dedicated pipe, but
//   they're explicitly seperated here for flexibility of modeling later. May
//   consider consolidating them into a single WriteFPXXXX type in the future.
def WriteFPMAC : SchedWrite;
def WriteFPMul : SchedWrite;
def WriteFPDiv : SchedWrite;
def WriteFPSqrt : SchedWrite;
def ReadFPMAC : SchedRead;
def ReadFPMul : SchedRead;
def ReadFPDiv : SchedRead;
def ReadFPSqrt : SchedRead;

// Noop
def WriteNoop : SchedWrite;


//===----------------------------------------------------------------------===//
// Subtarget specific Machine Models.

include "AArch64ScheduleA53.td"