Skip to content

Commit 6c9c180

Browse files
committed
[AArch64] Initial sched model for Neoverse N3
1 parent 4e73fa9 commit 6c9c180

File tree

3 files changed

+215
-221
lines changed

3 files changed

+215
-221
lines changed

llvm/lib/Target/AArch64/AArch64SchedNeoverseN3.td

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ def : ReadAdvance<ReadAdrBase, 0>;
6262
def : ReadAdvance<ReadST, 0>;
6363
def : ReadAdvance<ReadVLD, 0>;
6464

65+
// NOTE: Copied from N2.
6566
def : WriteRes<WriteAtomic, []> { let Unsupported = 1; }
66-
def : WriteRes<WriteFDiv, []> { let Unsupported = 1; }
67-
def : WriteRes<WriteBarrier, []> { let Unsupported = 1; }
68-
def : WriteRes<WriteHint, []> { let Unsupported = 1; }
67+
def : WriteRes<WriteBarrier, []> { let Latency = 1; }
68+
def : WriteRes<WriteHint, []> { let Latency = 1; }
6969

7070
//===----------------------------------------------------------------------===//
7171
// Define customized scheduler read/write types specific to the Neoverse N3.
@@ -125,12 +125,6 @@ def N3Write_20c_1M0 : SchedWriteRes<[N3UnitM0]> {
125125
//===----------------------------------------------------------------------===//
126126
// Define generic 2 micro-op types
127127

128-
def N3Write_1c_2I : SchedWriteRes<[N3UnitI]> {
129-
let Latency = 1;
130-
let NumMicroOps = 2;
131-
let ReleaseAtCycles = [2];
132-
}
133-
134128
def N3Write_1c_1B_1S : SchedWriteRes<[N3UnitB, N3UnitS]> {
135129
let Latency = 1;
136130
let NumMicroOps = 2;
@@ -770,7 +764,7 @@ def : InstRW<[N3Write_4c_2I_2L, WriteLDHi], (instrs LDPSWi)>;
770764
def : InstRW<[WriteAdr, WriteLD, WriteLDHi], (instrs LDPWpost, LDPWpre)>;
771765

772766
// Load pair, immed post-index or immed pre-index, normal, X-form
773-
def : InstRW<[N3Write_1c_2I, N3Write_4c_2L, WriteLDHi], (instrs LDPXpost, LDPXpre)>;
767+
def : InstRW<[WriteAdr, N3Write_4c_2L, WriteLDHi], (instrs LDPXpost, LDPXpre)>;
774768

775769
// Load pair, immed post-index or immed pre-index, signed words
776770
def : InstRW<[N3Write_0c, N3Write_4c_2I_2L, WriteLDHi], (instrs LDPSWpost, LDPSWpre)>;
@@ -785,7 +779,7 @@ def : SchedAlias<WriteST, N3Write_1c_1L01_1D>;
785779

786780
// Store register, immed post-index
787781
// Store register, immed pre-index
788-
def : InstRW<[N3Write_1c_2I, WriteST], (instregex "^STR(BB|HH|W|X)(post|pre)$")>;
782+
def : InstRW<[WriteAdr, WriteST], (instregex "^STR(BB|HH|W|X)(post|pre)$")>;
789783

790784
// Store register, register offset, basic
791785
// Store register, register offset, scaled by 4/8
@@ -800,7 +794,7 @@ def : SchedAlias<WriteSTP, N3Write_1c_1L01_1D>;
800794

801795
// Store pair, immed post-index
802796
// Store pair, immed pre-index
803-
def : InstRW<[N3Write_1c_2I, WriteSTP], (instregex "^STP[WX](post|pre)$")>;
797+
def : InstRW<[WriteAdr, WriteSTP], (instregex "^STP[WX](post|pre)$")>;
804798

805799
// Tag Load instructions
806800
// -----------------------------------------------------------------------------
@@ -856,7 +850,7 @@ def : InstRW<[N3Write_5c_1V0], (instrs FDIVHrr, FSQRTHr)>;
856850

857851
// FP divide, S-form
858852
// FP square root, S-form
859-
def : InstRW<[N3Write_7c_1V0], (instrs FDIVSrr, FSQRTSr)>;
853+
def : SchedAlias<WriteFDiv , N3Write_7c_1V0>;
860854

861855
// FP divide, D-form
862856
// FP square root, D-form
@@ -927,7 +921,7 @@ def : InstRW<[N3Write_6c_2L, WriteLDHi], (instrs LDPQi, LDNPQi)>;
927921
// Load vector pair, immed post-index, Q-form
928922
// Load vector pair, immed pre-index, S/D-form
929923
// Load vector pair, immed pre-index, Q-form
930-
def : InstRW<[N3Write_1c_2I, N3Write_6c_2L, WriteLDHi], (instregex "^LDP[SDQ](post|pre)$")>;
924+
def : InstRW<[WriteAdr, N3Write_6c_2L, WriteLDHi], (instregex "^LDP[SDQ](post|pre)$")>;
931925

932926
// FP store instructions
933927
// -----------------------------------------------------------------------------
@@ -938,13 +932,13 @@ def : InstRW<[N3Write_2c_1L01_1V], (instregex "^STUR[BHSDQ]i$")>;
938932

939933
// Store vector reg, immed post-index, B/H/S/D-form
940934
// Store vector reg, immed post-index, Q-form
941-
def : InstRW<[N3Write_1c_2I, N3Write_2c_1L01_1V], (instregex "^STR[BHSDQ]post$")>;
935+
def : InstRW<[WriteAdr, N3Write_2c_1L01_1V], (instregex "^STR[BHSDQ]post$")>;
942936

943937
// Store vector reg, immed pre-index, B/H/S/D-form
944-
def : InstRW<[N3Write_1c_2I, N3Write_3c_1L01_1V], (instregex "^STR[BHSD]pre$")>;
938+
def : InstRW<[WriteAdr, N3Write_3c_1L01_1V], (instregex "^STR[BHSD]pre$")>;
945939

946940
// Store vector reg, immed pre-index, Q-form
947-
def : InstRW<[N3Write_1c_2I, N3Write_2c_1L01_1V], (instrs STRQpre)>;
941+
def : InstRW<[WriteAdr, N3Write_2c_1L01_1V], (instrs STRQpre)>;
948942

949943
// Store vector reg, unsigned immed, B/H/S/D-form
950944
// Store vector reg, unsigned immed, Q-form
@@ -979,7 +973,7 @@ def : InstRW<[N3Write_2c_1L01_1V], (instregex "^STN?P[SDQ]i$")>;
979973
// Store vector pair, immed pre-index, S-form
980974
// Store vector pair, immed pre-index, D-form
981975
// Store vector pair, immed pre-index, Q-form
982-
def : InstRW<[N3Write_1c_2I, N3Write_2c_1L01_1V], (instregex "^STP[SDQ](post|pre)$")>;
976+
def : InstRW<[WriteAdr, N3Write_2c_1L01_1V], (instregex "^STP[SDQ](post|pre)$")>;
983977

984978
// ASIMD integer instructions
985979
// -----------------------------------------------------------------------------

0 commit comments

Comments
 (0)