Skip to content

Commit 24bbf27

Browse files
committed
[AArch64] Initial sched model for Neoverse N3
* Multiply without accumulate when Ra is ZR, MUL, MNEG, SMULL, SMNEGL, UMULL and UMNEGL instructions can be executed on utilized pipeline M with an execution throughput of 2.
1 parent 9e123ad commit 24bbf27

File tree

2 files changed

+47
-33
lines changed

2 files changed

+47
-33
lines changed

llvm/lib/Target/AArch64/AArch64SchedNeoverseN3.td

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def : ReadAdvance<ReadI, 0>;
5555
def : ReadAdvance<ReadISReg, 0>;
5656
def : ReadAdvance<ReadIEReg, 0>;
5757
def : ReadAdvance<ReadIM, 0>;
58-
def : ReadAdvance<ReadIMA, 1, [WriteIM32, WriteIM64]>;
58+
def : ReadAdvance<ReadIMA, 0>;
5959
def : ReadAdvance<ReadID, 0>;
6060
def : ReadAdvance<ReadExtrHi, 0>;
6161
def : ReadAdvance<ReadAdrBase, 0>;
@@ -661,12 +661,26 @@ def : SchedAlias<WriteID32, N3Write_12c_1M0>;
661661
// Divide, X-form
662662
def : SchedAlias<WriteID64, N3Write_20c_1M0>;
663663

664-
// Multiply accumulate, W-form
665-
// Multiply accumulate long
664+
def N3Wr_IM : SchedWriteRes<[N3UnitM]> { let Latency = 2; }
665+
def N3Wr_IMA : SchedWriteRes<[N3UnitM0]> { let Latency = 2; }
666+
def N3Wr_IMUL : SchedWriteVariant<[
667+
SchedVar<IsReg3ZeroPred, [N3Wr_IM]>,
668+
SchedVar<NoSchedPred, [N3Wr_IMA]>]>;
669+
def N3Rd_IMA : SchedReadAdvance<1, [N3Wr_IMA]>;
670+
666671
def : SchedAlias<WriteIM32, N3Write_2c_1M0>;
672+
def : SchedAlias<WriteIM64, N3Write_2c_1M0>;
673+
674+
// NOTE: Modified from V2
667675

676+
// Multiply
677+
// Multiply accumulate, W-form
668678
// Multiply accumulate, X-form
669-
def : SchedAlias<WriteIM64, N3Write_2c_1M0>;
679+
// Multiply accumulate long
680+
// Multiply long
681+
def : InstRW<[N3Wr_IMUL, ReadIM, ReadIM, N3Rd_IMA],
682+
(instregex "^M(ADD|SUB)[WX]rrr$",
683+
"^(S|U)M(ADD|SUB)Lrrr$")>;
670684

671685
// Multiply high
672686
def : InstRW<[N3Write_3c_1M], (instrs SMULHrr, UMULHrr)>;

llvm/test/tools/llvm-mca/AArch64/Neoverse/N3-basic-instructions.s

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1812,49 +1812,49 @@ drps
18121812
# CHECK-NEXT: 1 2 1.00 madd wzr, w0, w9, w11
18131813
# CHECK-NEXT: 1 2 1.00 madd w13, wzr, w4, w4
18141814
# CHECK-NEXT: 1 2 1.00 madd w19, w30, wzr, w29
1815-
# CHECK-NEXT: 1 2 1.00 mul w4, w5, w6
1815+
# CHECK-NEXT: 1 2 0.50 mul w4, w5, w6
18161816
# CHECK-NEXT: 1 2 1.00 madd x1, x3, x7, x4
18171817
# CHECK-NEXT: 1 2 1.00 madd xzr, x0, x9, x11
18181818
# CHECK-NEXT: 1 2 1.00 madd x13, xzr, x4, x4
18191819
# CHECK-NEXT: 1 2 1.00 madd x19, x30, xzr, x29
1820-
# CHECK-NEXT: 1 2 1.00 mul x4, x5, x6
1820+
# CHECK-NEXT: 1 2 0.50 mul x4, x5, x6
18211821
# CHECK-NEXT: 1 2 1.00 msub w1, w3, w7, w4
18221822
# CHECK-NEXT: 1 2 1.00 msub wzr, w0, w9, w11
18231823
# CHECK-NEXT: 1 2 1.00 msub w13, wzr, w4, w4
18241824
# CHECK-NEXT: 1 2 1.00 msub w19, w30, wzr, w29
1825-
# CHECK-NEXT: 1 2 1.00 mneg w4, w5, w6
1825+
# CHECK-NEXT: 1 2 0.50 mneg w4, w5, w6
18261826
# CHECK-NEXT: 1 2 1.00 msub x1, x3, x7, x4
18271827
# CHECK-NEXT: 1 2 1.00 msub xzr, x0, x9, x11
18281828
# CHECK-NEXT: 1 2 1.00 msub x13, xzr, x4, x4
18291829
# CHECK-NEXT: 1 2 1.00 msub x19, x30, xzr, x29
1830-
# CHECK-NEXT: 1 2 1.00 mneg x4, x5, x6
1830+
# CHECK-NEXT: 1 2 0.50 mneg x4, x5, x6
18311831
# CHECK-NEXT: 1 2 1.00 smaddl x3, w5, w2, x9
18321832
# CHECK-NEXT: 1 2 1.00 smaddl xzr, w10, w11, x12
18331833
# CHECK-NEXT: 1 2 1.00 smaddl x13, wzr, w14, x15
18341834
# CHECK-NEXT: 1 2 1.00 smaddl x16, w17, wzr, x18
1835-
# CHECK-NEXT: 1 2 1.00 smull x19, w20, w21
1835+
# CHECK-NEXT: 1 2 0.50 smull x19, w20, w21
18361836
# CHECK-NEXT: 1 2 1.00 smsubl x3, w5, w2, x9
18371837
# CHECK-NEXT: 1 2 1.00 smsubl xzr, w10, w11, x12
18381838
# CHECK-NEXT: 1 2 1.00 smsubl x13, wzr, w14, x15
18391839
# CHECK-NEXT: 1 2 1.00 smsubl x16, w17, wzr, x18
1840-
# CHECK-NEXT: 1 2 1.00 smnegl x19, w20, w21
1840+
# CHECK-NEXT: 1 2 0.50 smnegl x19, w20, w21
18411841
# CHECK-NEXT: 1 2 1.00 umaddl x3, w5, w2, x9
18421842
# CHECK-NEXT: 1 2 1.00 umaddl xzr, w10, w11, x12
18431843
# CHECK-NEXT: 1 2 1.00 umaddl x13, wzr, w14, x15
18441844
# CHECK-NEXT: 1 2 1.00 umaddl x16, w17, wzr, x18
1845-
# CHECK-NEXT: 1 2 1.00 umull x19, w20, w21
1845+
# CHECK-NEXT: 1 2 0.50 umull x19, w20, w21
18461846
# CHECK-NEXT: 1 2 1.00 umsubl x3, w5, w2, x9
18471847
# CHECK-NEXT: 1 2 1.00 umsubl x16, w17, wzr, x18
1848-
# CHECK-NEXT: 1 2 1.00 umnegl x19, w20, w21
1848+
# CHECK-NEXT: 1 2 0.50 umnegl x19, w20, w21
18491849
# CHECK-NEXT: 1 3 0.50 smulh x30, x29, x28
18501850
# CHECK-NEXT: 1 3 0.50 smulh x23, x22, xzr
18511851
# CHECK-NEXT: 1 3 0.50 umulh x23, x22, xzr
1852-
# CHECK-NEXT: 1 2 1.00 mul x19, x20, xzr
1853-
# CHECK-NEXT: 1 2 1.00 mneg w21, w22, w23
1854-
# CHECK-NEXT: 1 2 1.00 smull x11, w13, w17
1855-
# CHECK-NEXT: 1 2 1.00 umull x11, w13, w17
1856-
# CHECK-NEXT: 1 2 1.00 smnegl x11, w13, w17
1857-
# CHECK-NEXT: 1 2 1.00 umnegl x11, w13, w17
1852+
# CHECK-NEXT: 1 2 0.50 mul x19, x20, xzr
1853+
# CHECK-NEXT: 1 2 0.50 mneg w21, w22, w23
1854+
# CHECK-NEXT: 1 2 0.50 smull x11, w13, w17
1855+
# CHECK-NEXT: 1 2 0.50 umull x11, w13, w17
1856+
# CHECK-NEXT: 1 2 0.50 smnegl x11, w13, w17
1857+
# CHECK-NEXT: 1 2 0.50 umnegl x11, w13, w17
18581858
# CHECK-NEXT: 1 1 0.25 extr w3, w5, w7, #0
18591859
# CHECK-NEXT: 1 1 0.25 extr w11, w13, w17, #31
18601860
# CHECK-NEXT: 1 1 0.25 extr x3, x5, x7, #15
@@ -2557,7 +2557,7 @@ drps
25572557

25582558
# CHECK: Resource pressure per iteration:
25592559
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8]
2560-
# CHECK-NEXT: 11.00 11.00 33.00 33.00 99.33 163.33 163.33 352.50 193.50 144.00 144.00 185.00 65.00
2560+
# CHECK-NEXT: 11.00 11.00 33.00 33.00 99.33 163.33 163.33 345.50 200.50 144.00 144.00 185.00 65.00
25612561

25622562
# CHECK: Resource pressure by instruction:
25632563
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] Instructions:
@@ -2996,49 +2996,49 @@ drps
29962996
# CHECK-NEXT: - - - - - - - 1.00 - - - - - madd wzr, w0, w9, w11
29972997
# CHECK-NEXT: - - - - - - - 1.00 - - - - - madd w13, wzr, w4, w4
29982998
# CHECK-NEXT: - - - - - - - 1.00 - - - - - madd w19, w30, wzr, w29
2999-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - mul w4, w5, w6
2999+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - mul w4, w5, w6
30003000
# CHECK-NEXT: - - - - - - - 1.00 - - - - - madd x1, x3, x7, x4
30013001
# CHECK-NEXT: - - - - - - - 1.00 - - - - - madd xzr, x0, x9, x11
30023002
# CHECK-NEXT: - - - - - - - 1.00 - - - - - madd x13, xzr, x4, x4
30033003
# CHECK-NEXT: - - - - - - - 1.00 - - - - - madd x19, x30, xzr, x29
3004-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - mul x4, x5, x6
3004+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - mul x4, x5, x6
30053005
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub w1, w3, w7, w4
30063006
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub wzr, w0, w9, w11
30073007
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub w13, wzr, w4, w4
30083008
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub w19, w30, wzr, w29
3009-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - mneg w4, w5, w6
3009+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - mneg w4, w5, w6
30103010
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub x1, x3, x7, x4
30113011
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub xzr, x0, x9, x11
30123012
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub x13, xzr, x4, x4
30133013
# CHECK-NEXT: - - - - - - - 1.00 - - - - - msub x19, x30, xzr, x29
3014-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - mneg x4, x5, x6
3014+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - mneg x4, x5, x6
30153015
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smaddl x3, w5, w2, x9
30163016
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smaddl xzr, w10, w11, x12
30173017
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smaddl x13, wzr, w14, x15
30183018
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smaddl x16, w17, wzr, x18
3019-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smull x19, w20, w21
3019+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - smull x19, w20, w21
30203020
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smsubl x3, w5, w2, x9
30213021
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smsubl xzr, w10, w11, x12
30223022
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smsubl x13, wzr, w14, x15
30233023
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smsubl x16, w17, wzr, x18
3024-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smnegl x19, w20, w21
3024+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - smnegl x19, w20, w21
30253025
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umaddl x3, w5, w2, x9
30263026
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umaddl xzr, w10, w11, x12
30273027
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umaddl x13, wzr, w14, x15
30283028
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umaddl x16, w17, wzr, x18
3029-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umull x19, w20, w21
3029+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - umull x19, w20, w21
30303030
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umsubl x3, w5, w2, x9
30313031
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umsubl x16, w17, wzr, x18
3032-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umnegl x19, w20, w21
3032+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - umnegl x19, w20, w21
30333033
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - smulh x30, x29, x28
30343034
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - smulh x23, x22, xzr
30353035
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - umulh x23, x22, xzr
3036-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - mul x19, x20, xzr
3037-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - mneg w21, w22, w23
3038-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smull x11, w13, w17
3039-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umull x11, w13, w17
3040-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - smnegl x11, w13, w17
3041-
# CHECK-NEXT: - - - - - - - 1.00 - - - - - umnegl x11, w13, w17
3036+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - mul x19, x20, xzr
3037+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - mneg w21, w22, w23
3038+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - smull x11, w13, w17
3039+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - umull x11, w13, w17
3040+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - smnegl x11, w13, w17
3041+
# CHECK-NEXT: - - - - - - - 0.50 0.50 - - - - umnegl x11, w13, w17
30423042
# CHECK-NEXT: - - - - - - - 0.25 0.25 0.25 0.25 - - extr w3, w5, w7, #0
30433043
# CHECK-NEXT: - - - - - - - 0.25 0.25 0.25 0.25 - - extr w11, w13, w17, #31
30443044
# CHECK-NEXT: - - - - - - - 0.25 0.25 0.25 0.25 - - extr x3, x5, x7, #15

0 commit comments

Comments
 (0)