Skip to content

Commit 2a4c74c

Browse files
authored
[AArch64] Update the scheduling model for Cortex-X1/2/3/4 (#118826)
These Neoverse-V scheduling models more closely match the Cortex-X series cpus with 4 vector pipelines, even if they do not match exactly.
1 parent 1126bef commit 2a4c74c

File tree

5 files changed

+170
-24
lines changed

5 files changed

+170
-24
lines changed

llvm/lib/Target/AArch64/AArch64Processors.td

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,15 +1113,15 @@ def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82,
11131113
[TuneR82]>;
11141114
def : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE,
11151115
[TuneR82AE]>;
1116-
def : ProcessorModel<"cortex-x1", CortexA57Model, ProcessorFeatures.X1,
1116+
def : ProcessorModel<"cortex-x1", NeoverseV1Model, ProcessorFeatures.X1,
11171117
[TuneX1]>;
1118-
def : ProcessorModel<"cortex-x1c", CortexA57Model, ProcessorFeatures.X1C,
1118+
def : ProcessorModel<"cortex-x1c", NeoverseV1Model, ProcessorFeatures.X1C,
11191119
[TuneX1]>;
1120-
def : ProcessorModel<"cortex-x2", NeoverseN2Model, ProcessorFeatures.X2,
1120+
def : ProcessorModel<"cortex-x2", NeoverseV2Model, ProcessorFeatures.X2,
11211121
[TuneX2]>;
1122-
def : ProcessorModel<"cortex-x3", NeoverseN2Model, ProcessorFeatures.X3,
1122+
def : ProcessorModel<"cortex-x3", NeoverseV2Model, ProcessorFeatures.X3,
11231123
[TuneX3]>;
1124-
def : ProcessorModel<"cortex-x4", NeoverseN2Model, ProcessorFeatures.X4,
1124+
def : ProcessorModel<"cortex-x4", NeoverseV2Model, ProcessorFeatures.X4,
11251125
[TuneX4]>;
11261126
def : ProcessorModel<"cortex-x925", NeoverseV2Model, ProcessorFeatures.X925,
11271127
[TuneX925]>;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2+
# RUN: llvm-mca -mtriple=aarch64 -mcpu=cortex-x1 -instruction-tables < %s | FileCheck %s
3+
4+
# Check the Neoverse V1 model is used.
5+
6+
add v0.16b, v1.16b, v31.16b
7+
8+
# CHECK: Instruction Info:
9+
# CHECK-NEXT: [1]: #uOps
10+
# CHECK-NEXT: [2]: Latency
11+
# CHECK-NEXT: [3]: RThroughput
12+
# CHECK-NEXT: [4]: MayLoad
13+
# CHECK-NEXT: [5]: MayStore
14+
# CHECK-NEXT: [6]: HasSideEffects (U)
15+
16+
# CHECK: [1] [2] [3] [4] [5] [6] Instructions:
17+
# CHECK-NEXT: 1 2 0.25 add v0.16b, v1.16b, v31.16b
18+
19+
# CHECK: Resources:
20+
# CHECK-NEXT: [0.0] - V1UnitB
21+
# CHECK-NEXT: [0.1] - V1UnitB
22+
# CHECK-NEXT: [1.0] - V1UnitD
23+
# CHECK-NEXT: [1.1] - V1UnitD
24+
# CHECK-NEXT: [2.0] - V1UnitFlg
25+
# CHECK-NEXT: [2.1] - V1UnitFlg
26+
# CHECK-NEXT: [2.2] - V1UnitFlg
27+
# CHECK-NEXT: [3] - V1UnitL2
28+
# CHECK-NEXT: [4.0] - V1UnitL01
29+
# CHECK-NEXT: [4.1] - V1UnitL01
30+
# CHECK-NEXT: [5] - V1UnitM0
31+
# CHECK-NEXT: [6] - V1UnitM1
32+
# CHECK-NEXT: [7.0] - V1UnitS
33+
# CHECK-NEXT: [7.1] - V1UnitS
34+
# CHECK-NEXT: [8] - V1UnitV0
35+
# CHECK-NEXT: [9] - V1UnitV1
36+
# CHECK-NEXT: [10] - V1UnitV2
37+
# CHECK-NEXT: [11] - V1UnitV3
38+
39+
# CHECK: Resource pressure per iteration:
40+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7.0] [7.1] [8] [9] [10] [11]
41+
# CHECK-NEXT: - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25
42+
43+
# CHECK: Resource pressure by instruction:
44+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7.0] [7.1] [8] [9] [10] [11] Instructions:
45+
# CHECK-NEXT: - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25 add v0.16b, v1.16b, v31.16b
Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
22
# RUN: llvm-mca -mtriple=aarch64 -mcpu=cortex-x2 -instruction-tables < %s | FileCheck %s
33

4-
# Check the Neoverse N2 model is used.
4+
# Check the Neoverse V2 model is used.
55

66
addhnb z0.b, z1.h, z31.h
77

@@ -14,27 +14,34 @@ addhnb z0.b, z1.h, z31.h
1414
# CHECK-NEXT: [6]: HasSideEffects (U)
1515

1616
# CHECK: [1] [2] [3] [4] [5] [6] Instructions:
17-
# CHECK-NEXT: 1 2 0.50 addhnb z0.b, z1.h, z31.h
17+
# CHECK-NEXT: 1 2 0.25 addhnb z0.b, z1.h, z31.h
1818

1919
# CHECK: Resources:
20-
# CHECK-NEXT: [0.0] - N2UnitB
21-
# CHECK-NEXT: [0.1] - N2UnitB
22-
# CHECK-NEXT: [1.0] - N2UnitD
23-
# CHECK-NEXT: [1.1] - N2UnitD
24-
# CHECK-NEXT: [2] - N2UnitL2
25-
# CHECK-NEXT: [3.0] - N2UnitL01
26-
# CHECK-NEXT: [3.1] - N2UnitL01
27-
# CHECK-NEXT: [4] - N2UnitM0
28-
# CHECK-NEXT: [5] - N2UnitM1
29-
# CHECK-NEXT: [6.0] - N2UnitS
30-
# CHECK-NEXT: [6.1] - N2UnitS
31-
# CHECK-NEXT: [7] - N2UnitV0
32-
# CHECK-NEXT: [8] - N2UnitV1
20+
# CHECK-NEXT: [0.0] - V2UnitB
21+
# CHECK-NEXT: [0.1] - V2UnitB
22+
# CHECK-NEXT: [1.0] - V2UnitD
23+
# CHECK-NEXT: [1.1] - V2UnitD
24+
# CHECK-NEXT: [2.0] - V2UnitFlg
25+
# CHECK-NEXT: [2.1] - V2UnitFlg
26+
# CHECK-NEXT: [2.2] - V2UnitFlg
27+
# CHECK-NEXT: [3] - V2UnitL2
28+
# CHECK-NEXT: [4.0] - V2UnitL01
29+
# CHECK-NEXT: [4.1] - V2UnitL01
30+
# CHECK-NEXT: [5] - V2UnitM0
31+
# CHECK-NEXT: [6] - V2UnitM1
32+
# CHECK-NEXT: [7] - V2UnitS0
33+
# CHECK-NEXT: [8] - V2UnitS1
34+
# CHECK-NEXT: [9] - V2UnitS2
35+
# CHECK-NEXT: [10] - V2UnitS3
36+
# CHECK-NEXT: [11] - V2UnitV0
37+
# CHECK-NEXT: [12] - V2UnitV1
38+
# CHECK-NEXT: [13] - V2UnitV2
39+
# CHECK-NEXT: [14] - V2UnitV3
3340

3441
# CHECK: Resource pressure per iteration:
35-
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8]
36-
# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50
42+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]
43+
# CHECK-NEXT: - - - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25
3744

3845
# CHECK: Resource pressure by instruction:
39-
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] Instructions:
40-
# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50 addhnb z0.b, z1.h, z31.h
46+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] Instructions:
47+
# CHECK-NEXT: - - - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25 addhnb z0.b, z1.h, z31.h
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2+
# RUN: llvm-mca -mtriple=aarch64 -mcpu=cortex-x3 -instruction-tables < %s | FileCheck %s
3+
4+
# Check the Neoverse V2 model is used.
5+
6+
addhnb z0.b, z1.h, z31.h
7+
8+
# CHECK: Instruction Info:
9+
# CHECK-NEXT: [1]: #uOps
10+
# CHECK-NEXT: [2]: Latency
11+
# CHECK-NEXT: [3]: RThroughput
12+
# CHECK-NEXT: [4]: MayLoad
13+
# CHECK-NEXT: [5]: MayStore
14+
# CHECK-NEXT: [6]: HasSideEffects (U)
15+
16+
# CHECK: [1] [2] [3] [4] [5] [6] Instructions:
17+
# CHECK-NEXT: 1 2 0.25 addhnb z0.b, z1.h, z31.h
18+
19+
# CHECK: Resources:
20+
# CHECK-NEXT: [0.0] - V2UnitB
21+
# CHECK-NEXT: [0.1] - V2UnitB
22+
# CHECK-NEXT: [1.0] - V2UnitD
23+
# CHECK-NEXT: [1.1] - V2UnitD
24+
# CHECK-NEXT: [2.0] - V2UnitFlg
25+
# CHECK-NEXT: [2.1] - V2UnitFlg
26+
# CHECK-NEXT: [2.2] - V2UnitFlg
27+
# CHECK-NEXT: [3] - V2UnitL2
28+
# CHECK-NEXT: [4.0] - V2UnitL01
29+
# CHECK-NEXT: [4.1] - V2UnitL01
30+
# CHECK-NEXT: [5] - V2UnitM0
31+
# CHECK-NEXT: [6] - V2UnitM1
32+
# CHECK-NEXT: [7] - V2UnitS0
33+
# CHECK-NEXT: [8] - V2UnitS1
34+
# CHECK-NEXT: [9] - V2UnitS2
35+
# CHECK-NEXT: [10] - V2UnitS3
36+
# CHECK-NEXT: [11] - V2UnitV0
37+
# CHECK-NEXT: [12] - V2UnitV1
38+
# CHECK-NEXT: [13] - V2UnitV2
39+
# CHECK-NEXT: [14] - V2UnitV3
40+
41+
# CHECK: Resource pressure per iteration:
42+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]
43+
# CHECK-NEXT: - - - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25
44+
45+
# CHECK: Resource pressure by instruction:
46+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] Instructions:
47+
# CHECK-NEXT: - - - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25 addhnb z0.b, z1.h, z31.h
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2+
# RUN: llvm-mca -mtriple=aarch64 -mcpu=cortex-x4 -instruction-tables < %s | FileCheck %s
3+
4+
# Check the Neoverse V2 model is used.
5+
6+
addhnb z0.b, z1.h, z31.h
7+
8+
# CHECK: Instruction Info:
9+
# CHECK-NEXT: [1]: #uOps
10+
# CHECK-NEXT: [2]: Latency
11+
# CHECK-NEXT: [3]: RThroughput
12+
# CHECK-NEXT: [4]: MayLoad
13+
# CHECK-NEXT: [5]: MayStore
14+
# CHECK-NEXT: [6]: HasSideEffects (U)
15+
16+
# CHECK: [1] [2] [3] [4] [5] [6] Instructions:
17+
# CHECK-NEXT: 1 2 0.25 addhnb z0.b, z1.h, z31.h
18+
19+
# CHECK: Resources:
20+
# CHECK-NEXT: [0.0] - V2UnitB
21+
# CHECK-NEXT: [0.1] - V2UnitB
22+
# CHECK-NEXT: [1.0] - V2UnitD
23+
# CHECK-NEXT: [1.1] - V2UnitD
24+
# CHECK-NEXT: [2.0] - V2UnitFlg
25+
# CHECK-NEXT: [2.1] - V2UnitFlg
26+
# CHECK-NEXT: [2.2] - V2UnitFlg
27+
# CHECK-NEXT: [3] - V2UnitL2
28+
# CHECK-NEXT: [4.0] - V2UnitL01
29+
# CHECK-NEXT: [4.1] - V2UnitL01
30+
# CHECK-NEXT: [5] - V2UnitM0
31+
# CHECK-NEXT: [6] - V2UnitM1
32+
# CHECK-NEXT: [7] - V2UnitS0
33+
# CHECK-NEXT: [8] - V2UnitS1
34+
# CHECK-NEXT: [9] - V2UnitS2
35+
# CHECK-NEXT: [10] - V2UnitS3
36+
# CHECK-NEXT: [11] - V2UnitV0
37+
# CHECK-NEXT: [12] - V2UnitV1
38+
# CHECK-NEXT: [13] - V2UnitV2
39+
# CHECK-NEXT: [14] - V2UnitV3
40+
41+
# CHECK: Resource pressure per iteration:
42+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]
43+
# CHECK-NEXT: - - - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25
44+
45+
# CHECK: Resource pressure by instruction:
46+
# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2.0] [2.1] [2.2] [3] [4.0] [4.1] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] Instructions:
47+
# CHECK-NEXT: - - - - - - - - - - - - - - - - 0.25 0.25 0.25 0.25 addhnb z0.b, z1.h, z31.h

0 commit comments

Comments
 (0)