Skip to content

Commit 2819009

Browse files
committed
[X86] AMD Zen 3: _REV variants of zero-cycles moves are also zero-cycles (PR50261)
Sometimes disassembler picks _REV variants of instructions over the plain ones, which in this case exposed an issue that the _REV variants aren't being modelled as optimizable moves.
1 parent a8e30e6 commit 2819009

File tree

3 files changed

+92
-82
lines changed

3 files changed

+92
-82
lines changed

llvm/lib/Target/X86/X86ScheduleZnver3.td

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,27 +1464,37 @@ defm : Zn3WriteResYMM<WriteVecMoveY, [], 0, [], 1>;
14641464
def : IsOptimizableRegisterMove<[
14651465
InstructionEquivalenceClass<[
14661466
// GPR variants.
1467-
MOV32rr, MOV64rr,
1467+
MOV32rr, MOV32rr_REV,
1468+
MOV64rr, MOV64rr_REV,
14681469
// FIXME: MOVSXD32rr, but it is only supported in disassembler.
14691470
// FIXME: XCHG32rr/XCHG64rr after MCA is fixed
14701471

14711472
// MMX variants.
14721473
// MMX moves are *NOT* eliminated.
14731474

14741475
// SSE variants.
1475-
MOVAPSrr, MOVUPSrr,
1476-
MOVAPDrr, MOVUPDrr,
1477-
MOVDQArr, MOVDQUrr,
1476+
MOVAPSrr, MOVAPSrr_REV,
1477+
MOVUPSrr, MOVUPSrr_REV,
1478+
MOVAPDrr, MOVAPDrr_REV,
1479+
MOVUPDrr, MOVUPDrr_REV,
1480+
MOVDQArr, MOVDQArr_REV,
1481+
MOVDQUrr, MOVDQUrr_REV,
14781482

14791483
// AVX variants.
1480-
VMOVAPSrr, VMOVUPSrr,
1481-
VMOVAPDrr, VMOVUPDrr,
1482-
VMOVDQArr, VMOVDQUrr,
1484+
VMOVAPSrr, VMOVAPSrr_REV,
1485+
VMOVUPSrr, VMOVUPSrr_REV,
1486+
VMOVAPDrr, VMOVAPDrr_REV,
1487+
VMOVUPDrr, VMOVUPDrr_REV,
1488+
VMOVDQArr, VMOVDQArr_REV,
1489+
VMOVDQUrr, VMOVDQUrr_REV,
14831490

14841491
// AVX YMM variants.
1485-
VMOVAPSYrr, VMOVUPSYrr,
1486-
VMOVAPDYrr, VMOVUPDYrr,
1487-
VMOVDQAYrr, VMOVDQUYrr
1492+
VMOVAPSYrr, VMOVAPSYrr_REV,
1493+
VMOVUPSYrr, VMOVUPSYrr_REV,
1494+
VMOVAPDYrr, VMOVAPDYrr_REV,
1495+
VMOVUPDYrr, VMOVUPDYrr_REV,
1496+
VMOVDQAYrr, VMOVDQAYrr_REV,
1497+
VMOVDQUYrr, VMOVDQUYrr_REV,
14881498
], TruePred >
14891499
]>;
14901500

llvm/test/tools/llvm-mca/X86/Znver3/reg-move-elimination-avx-xmm.s

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,15 @@ vmovdqu %xmm15, %xmm0
154154
# CHECK-NEXT: 1 0 0.17 vmovaps %xmm15, %xmm0
155155

156156
# CHECK: Register File statistics:
157-
# CHECK-NEXT: Total number of mappings created: 1000
158-
# CHECK-NEXT: Max number of mappings used: 1
157+
# CHECK-NEXT: Total number of mappings created: 0
158+
# CHECK-NEXT: Max number of mappings used: 0
159159

160160
# CHECK: * Register File #1 -- Zn3FpPRF:
161161
# CHECK-NEXT: Number of physical registers: 160
162-
# CHECK-NEXT: Total number of mappings created: 1000
163-
# CHECK-NEXT: Max number of mappings used: 1
164-
# CHECK-NEXT: Number of optimizable moves: 15000
165-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
162+
# CHECK-NEXT: Total number of mappings created: 0
163+
# CHECK-NEXT: Max number of mappings used: 0
164+
# CHECK-NEXT: Number of optimizable moves: 16000
165+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
166166
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
167167
# CHECK-NEXT: Max moves eliminated per cycle: 6
168168

@@ -448,15 +448,15 @@ vmovdqu %xmm15, %xmm0
448448
# CHECK-NEXT: 1 0 0.17 vmovups %xmm15, %xmm0
449449

450450
# CHECK: Register File statistics:
451-
# CHECK-NEXT: Total number of mappings created: 1000
452-
# CHECK-NEXT: Max number of mappings used: 1
451+
# CHECK-NEXT: Total number of mappings created: 0
452+
# CHECK-NEXT: Max number of mappings used: 0
453453

454454
# CHECK: * Register File #1 -- Zn3FpPRF:
455455
# CHECK-NEXT: Number of physical registers: 160
456-
# CHECK-NEXT: Total number of mappings created: 1000
457-
# CHECK-NEXT: Max number of mappings used: 1
458-
# CHECK-NEXT: Number of optimizable moves: 15000
459-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
456+
# CHECK-NEXT: Total number of mappings created: 0
457+
# CHECK-NEXT: Max number of mappings used: 0
458+
# CHECK-NEXT: Number of optimizable moves: 16000
459+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
460460
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
461461
# CHECK-NEXT: Max moves eliminated per cycle: 6
462462

@@ -742,15 +742,15 @@ vmovdqu %xmm15, %xmm0
742742
# CHECK-NEXT: 1 0 0.17 vmovapd %xmm15, %xmm0
743743

744744
# CHECK: Register File statistics:
745-
# CHECK-NEXT: Total number of mappings created: 1000
746-
# CHECK-NEXT: Max number of mappings used: 1
745+
# CHECK-NEXT: Total number of mappings created: 0
746+
# CHECK-NEXT: Max number of mappings used: 0
747747

748748
# CHECK: * Register File #1 -- Zn3FpPRF:
749749
# CHECK-NEXT: Number of physical registers: 160
750-
# CHECK-NEXT: Total number of mappings created: 1000
751-
# CHECK-NEXT: Max number of mappings used: 1
752-
# CHECK-NEXT: Number of optimizable moves: 15000
753-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
750+
# CHECK-NEXT: Total number of mappings created: 0
751+
# CHECK-NEXT: Max number of mappings used: 0
752+
# CHECK-NEXT: Number of optimizable moves: 16000
753+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
754754
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
755755
# CHECK-NEXT: Max moves eliminated per cycle: 6
756756

@@ -1036,15 +1036,15 @@ vmovdqu %xmm15, %xmm0
10361036
# CHECK-NEXT: 1 0 0.17 vmovupd %xmm15, %xmm0
10371037

10381038
# CHECK: Register File statistics:
1039-
# CHECK-NEXT: Total number of mappings created: 1000
1040-
# CHECK-NEXT: Max number of mappings used: 1
1039+
# CHECK-NEXT: Total number of mappings created: 0
1040+
# CHECK-NEXT: Max number of mappings used: 0
10411041

10421042
# CHECK: * Register File #1 -- Zn3FpPRF:
10431043
# CHECK-NEXT: Number of physical registers: 160
1044-
# CHECK-NEXT: Total number of mappings created: 1000
1045-
# CHECK-NEXT: Max number of mappings used: 1
1046-
# CHECK-NEXT: Number of optimizable moves: 15000
1047-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
1044+
# CHECK-NEXT: Total number of mappings created: 0
1045+
# CHECK-NEXT: Max number of mappings used: 0
1046+
# CHECK-NEXT: Number of optimizable moves: 16000
1047+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
10481048
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
10491049
# CHECK-NEXT: Max moves eliminated per cycle: 6
10501050

@@ -1330,15 +1330,15 @@ vmovdqu %xmm15, %xmm0
13301330
# CHECK-NEXT: 1 0 0.17 vmovdqa %xmm15, %xmm0
13311331

13321332
# CHECK: Register File statistics:
1333-
# CHECK-NEXT: Total number of mappings created: 1000
1334-
# CHECK-NEXT: Max number of mappings used: 1
1333+
# CHECK-NEXT: Total number of mappings created: 0
1334+
# CHECK-NEXT: Max number of mappings used: 0
13351335

13361336
# CHECK: * Register File #1 -- Zn3FpPRF:
13371337
# CHECK-NEXT: Number of physical registers: 160
1338-
# CHECK-NEXT: Total number of mappings created: 1000
1339-
# CHECK-NEXT: Max number of mappings used: 1
1340-
# CHECK-NEXT: Number of optimizable moves: 15000
1341-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
1338+
# CHECK-NEXT: Total number of mappings created: 0
1339+
# CHECK-NEXT: Max number of mappings used: 0
1340+
# CHECK-NEXT: Number of optimizable moves: 16000
1341+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
13421342
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
13431343
# CHECK-NEXT: Max moves eliminated per cycle: 6
13441344

@@ -1624,15 +1624,15 @@ vmovdqu %xmm15, %xmm0
16241624
# CHECK-NEXT: 1 0 0.17 vmovdqu %xmm15, %xmm0
16251625

16261626
# CHECK: Register File statistics:
1627-
# CHECK-NEXT: Total number of mappings created: 1000
1628-
# CHECK-NEXT: Max number of mappings used: 1
1627+
# CHECK-NEXT: Total number of mappings created: 0
1628+
# CHECK-NEXT: Max number of mappings used: 0
16291629

16301630
# CHECK: * Register File #1 -- Zn3FpPRF:
16311631
# CHECK-NEXT: Number of physical registers: 160
1632-
# CHECK-NEXT: Total number of mappings created: 1000
1633-
# CHECK-NEXT: Max number of mappings used: 1
1634-
# CHECK-NEXT: Number of optimizable moves: 15000
1635-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
1632+
# CHECK-NEXT: Total number of mappings created: 0
1633+
# CHECK-NEXT: Max number of mappings used: 0
1634+
# CHECK-NEXT: Number of optimizable moves: 16000
1635+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
16361636
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
16371637
# CHECK-NEXT: Max moves eliminated per cycle: 6
16381638

llvm/test/tools/llvm-mca/X86/Znver3/reg-move-elimination-avx-ymm.s

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,15 @@ vmovdqu %ymm15, %ymm0
154154
# CHECK-NEXT: 1 0 0.17 vmovaps %ymm15, %ymm0
155155

156156
# CHECK: Register File statistics:
157-
# CHECK-NEXT: Total number of mappings created: 1000
158-
# CHECK-NEXT: Max number of mappings used: 1
157+
# CHECK-NEXT: Total number of mappings created: 0
158+
# CHECK-NEXT: Max number of mappings used: 0
159159

160160
# CHECK: * Register File #1 -- Zn3FpPRF:
161161
# CHECK-NEXT: Number of physical registers: 160
162-
# CHECK-NEXT: Total number of mappings created: 1000
163-
# CHECK-NEXT: Max number of mappings used: 1
164-
# CHECK-NEXT: Number of optimizable moves: 15000
165-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
162+
# CHECK-NEXT: Total number of mappings created: 0
163+
# CHECK-NEXT: Max number of mappings used: 0
164+
# CHECK-NEXT: Number of optimizable moves: 16000
165+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
166166
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
167167
# CHECK-NEXT: Max moves eliminated per cycle: 6
168168

@@ -448,15 +448,15 @@ vmovdqu %ymm15, %ymm0
448448
# CHECK-NEXT: 1 0 0.17 vmovups %ymm15, %ymm0
449449

450450
# CHECK: Register File statistics:
451-
# CHECK-NEXT: Total number of mappings created: 1000
452-
# CHECK-NEXT: Max number of mappings used: 1
451+
# CHECK-NEXT: Total number of mappings created: 0
452+
# CHECK-NEXT: Max number of mappings used: 0
453453

454454
# CHECK: * Register File #1 -- Zn3FpPRF:
455455
# CHECK-NEXT: Number of physical registers: 160
456-
# CHECK-NEXT: Total number of mappings created: 1000
457-
# CHECK-NEXT: Max number of mappings used: 1
458-
# CHECK-NEXT: Number of optimizable moves: 15000
459-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
456+
# CHECK-NEXT: Total number of mappings created: 0
457+
# CHECK-NEXT: Max number of mappings used: 0
458+
# CHECK-NEXT: Number of optimizable moves: 16000
459+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
460460
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
461461
# CHECK-NEXT: Max moves eliminated per cycle: 6
462462

@@ -742,15 +742,15 @@ vmovdqu %ymm15, %ymm0
742742
# CHECK-NEXT: 1 0 0.17 vmovapd %ymm15, %ymm0
743743

744744
# CHECK: Register File statistics:
745-
# CHECK-NEXT: Total number of mappings created: 1000
746-
# CHECK-NEXT: Max number of mappings used: 1
745+
# CHECK-NEXT: Total number of mappings created: 0
746+
# CHECK-NEXT: Max number of mappings used: 0
747747

748748
# CHECK: * Register File #1 -- Zn3FpPRF:
749749
# CHECK-NEXT: Number of physical registers: 160
750-
# CHECK-NEXT: Total number of mappings created: 1000
751-
# CHECK-NEXT: Max number of mappings used: 1
752-
# CHECK-NEXT: Number of optimizable moves: 15000
753-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
750+
# CHECK-NEXT: Total number of mappings created: 0
751+
# CHECK-NEXT: Max number of mappings used: 0
752+
# CHECK-NEXT: Number of optimizable moves: 16000
753+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
754754
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
755755
# CHECK-NEXT: Max moves eliminated per cycle: 6
756756

@@ -1036,15 +1036,15 @@ vmovdqu %ymm15, %ymm0
10361036
# CHECK-NEXT: 1 0 0.17 vmovupd %ymm15, %ymm0
10371037

10381038
# CHECK: Register File statistics:
1039-
# CHECK-NEXT: Total number of mappings created: 1000
1040-
# CHECK-NEXT: Max number of mappings used: 1
1039+
# CHECK-NEXT: Total number of mappings created: 0
1040+
# CHECK-NEXT: Max number of mappings used: 0
10411041

10421042
# CHECK: * Register File #1 -- Zn3FpPRF:
10431043
# CHECK-NEXT: Number of physical registers: 160
1044-
# CHECK-NEXT: Total number of mappings created: 1000
1045-
# CHECK-NEXT: Max number of mappings used: 1
1046-
# CHECK-NEXT: Number of optimizable moves: 15000
1047-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
1044+
# CHECK-NEXT: Total number of mappings created: 0
1045+
# CHECK-NEXT: Max number of mappings used: 0
1046+
# CHECK-NEXT: Number of optimizable moves: 16000
1047+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
10481048
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
10491049
# CHECK-NEXT: Max moves eliminated per cycle: 6
10501050

@@ -1330,15 +1330,15 @@ vmovdqu %ymm15, %ymm0
13301330
# CHECK-NEXT: 1 0 0.17 vmovdqa %ymm15, %ymm0
13311331

13321332
# CHECK: Register File statistics:
1333-
# CHECK-NEXT: Total number of mappings created: 1000
1334-
# CHECK-NEXT: Max number of mappings used: 1
1333+
# CHECK-NEXT: Total number of mappings created: 0
1334+
# CHECK-NEXT: Max number of mappings used: 0
13351335

13361336
# CHECK: * Register File #1 -- Zn3FpPRF:
13371337
# CHECK-NEXT: Number of physical registers: 160
1338-
# CHECK-NEXT: Total number of mappings created: 1000
1339-
# CHECK-NEXT: Max number of mappings used: 1
1340-
# CHECK-NEXT: Number of optimizable moves: 15000
1341-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
1338+
# CHECK-NEXT: Total number of mappings created: 0
1339+
# CHECK-NEXT: Max number of mappings used: 0
1340+
# CHECK-NEXT: Number of optimizable moves: 16000
1341+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
13421342
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
13431343
# CHECK-NEXT: Max moves eliminated per cycle: 6
13441344

@@ -1624,15 +1624,15 @@ vmovdqu %ymm15, %ymm0
16241624
# CHECK-NEXT: 1 0 0.17 vmovdqu %ymm15, %ymm0
16251625

16261626
# CHECK: Register File statistics:
1627-
# CHECK-NEXT: Total number of mappings created: 1000
1628-
# CHECK-NEXT: Max number of mappings used: 1
1627+
# CHECK-NEXT: Total number of mappings created: 0
1628+
# CHECK-NEXT: Max number of mappings used: 0
16291629

16301630
# CHECK: * Register File #1 -- Zn3FpPRF:
16311631
# CHECK-NEXT: Number of physical registers: 160
1632-
# CHECK-NEXT: Total number of mappings created: 1000
1633-
# CHECK-NEXT: Max number of mappings used: 1
1634-
# CHECK-NEXT: Number of optimizable moves: 15000
1635-
# CHECK-NEXT: Number of moves eliminated: 15000 (100.0%)
1632+
# CHECK-NEXT: Total number of mappings created: 0
1633+
# CHECK-NEXT: Max number of mappings used: 0
1634+
# CHECK-NEXT: Number of optimizable moves: 16000
1635+
# CHECK-NEXT: Number of moves eliminated: 16000 (100.0%)
16361636
# CHECK-NEXT: Number of zero moves: 0 (0.0%)
16371637
# CHECK-NEXT: Max moves eliminated per cycle: 6
16381638

0 commit comments

Comments
 (0)