Skip to content

Commit f2b0443

Browse files
committed
[ARM] Correct Cortex-M55 scheduling info for VMINV/VMAXV
It appears that these were the wrong way around, with the wrong type sizes taking extra cycles. The smaller i8 sizes are now the ones marked as taking longer.
1 parent e7fa52a commit f2b0443

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

llvm/lib/Target/ARM/ARMScheduleM55.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,9 @@ def : InstRW<[M55Write2IntE2], (instregex "MVE_VHADD")>;
353353
def : InstRW<[M55Write2IntE2], (instregex "MVE_VHCADD")>;
354354
def : InstRW<[M55Write2IntE2], (instregex "MVE_VHSUB")>;
355355
def : InstRW<[M55Write2IntE2], (instregex "MVE_V(MAX|MIN)A?(s|u)")>;
356-
def : InstRW<[M55Write2IntE3], (instregex "MVE_V(MAX|MIN)A?V(s|u)8")>;
356+
def : InstRW<[M55Write2IntE3Plus2], (instregex "MVE_V(MAX|MIN)A?V(s|u)8")>;
357357
def : InstRW<[M55Write2IntE3Plus1], (instregex "MVE_V(MAX|MIN)A?V(s|u)16")>;
358-
def : InstRW<[M55Write2IntE3Plus2], (instregex "MVE_V(MAX|MIN)A?V(s|u)32")>;
358+
def : InstRW<[M55Write2IntE3], (instregex "MVE_V(MAX|MIN)A?V(s|u)32")>;
359359
def : InstRW<[M55Write2IntE4NoFwd], (instregex "MVE_VMOVN")>;
360360
def : InstRW<[M55Write2IntE2], (instregex "MVE_VMOVL")>;
361361
def : InstRW<[M55Write2IntE3], (instregex "MVE_VMULL[BT]p")>;

llvm/test/tools/llvm-mca/ARM/m55-mve-int.s

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -631,15 +631,15 @@ vsub.i32 q0, q2, r0
631631
# CHECK-NEXT: 1 1 2.00 vmaxa.s8 q0, q2
632632
# CHECK-NEXT: 1 1 2.00 vmaxa.s16 q0, q2
633633
# CHECK-NEXT: 1 1 2.00 vmaxa.s32 q0, q2
634-
# CHECK-NEXT: 1 2 2.00 vmaxv.s8 r0, q2
635-
# CHECK-NEXT: 1 2 2.00 vmaxv.u8 r0, q2
634+
# CHECK-NEXT: 1 4 2.00 vmaxv.s8 r0, q2
635+
# CHECK-NEXT: 1 4 2.00 vmaxv.u8 r0, q2
636636
# CHECK-NEXT: 1 3 2.00 vmaxv.s16 r0, q2
637637
# CHECK-NEXT: 1 3 2.00 vmaxv.u16 r0, q2
638-
# CHECK-NEXT: 1 4 2.00 vmaxv.s32 r0, q2
639-
# CHECK-NEXT: 1 4 2.00 vmaxv.u32 r0, q2
640-
# CHECK-NEXT: 1 2 2.00 vmaxav.s8 r0, q2
638+
# CHECK-NEXT: 1 2 2.00 vmaxv.s32 r0, q2
639+
# CHECK-NEXT: 1 2 2.00 vmaxv.u32 r0, q2
640+
# CHECK-NEXT: 1 4 2.00 vmaxav.s8 r0, q2
641641
# CHECK-NEXT: 1 3 2.00 vmaxav.s16 r0, q2
642-
# CHECK-NEXT: 1 4 2.00 vmaxav.s32 r0, q2
642+
# CHECK-NEXT: 1 2 2.00 vmaxav.s32 r0, q2
643643
# CHECK-NEXT: 1 1 2.00 vmin.s8 q0, q2, q1
644644
# CHECK-NEXT: 1 1 2.00 vmin.u8 q0, q2, q1
645645
# CHECK-NEXT: 1 1 2.00 vmin.s16 q0, q2, q1
@@ -649,15 +649,15 @@ vsub.i32 q0, q2, r0
649649
# CHECK-NEXT: 1 1 2.00 vmina.s8 q0, q2
650650
# CHECK-NEXT: 1 1 2.00 vmina.s16 q0, q2
651651
# CHECK-NEXT: 1 1 2.00 vmina.s32 q0, q2
652-
# CHECK-NEXT: 1 2 2.00 vminv.s8 r0, q2
653-
# CHECK-NEXT: 1 2 2.00 vminv.u8 r0, q2
652+
# CHECK-NEXT: 1 4 2.00 vminv.s8 r0, q2
653+
# CHECK-NEXT: 1 4 2.00 vminv.u8 r0, q2
654654
# CHECK-NEXT: 1 3 2.00 vminv.s16 r0, q2
655655
# CHECK-NEXT: 1 3 2.00 vminv.u16 r0, q2
656-
# CHECK-NEXT: 1 4 2.00 vminv.s32 r0, q2
657-
# CHECK-NEXT: 1 4 2.00 vminv.u32 r0, q2
658-
# CHECK-NEXT: 1 2 2.00 vminav.s8 r0, q2
656+
# CHECK-NEXT: 1 2 2.00 vminv.s32 r0, q2
657+
# CHECK-NEXT: 1 2 2.00 vminv.u32 r0, q2
658+
# CHECK-NEXT: 1 4 2.00 vminav.s8 r0, q2
659659
# CHECK-NEXT: 1 3 2.00 vminav.s16 r0, q2
660-
# CHECK-NEXT: 1 4 2.00 vminav.s32 r0, q2
660+
# CHECK-NEXT: 1 2 2.00 vminav.s32 r0, q2
661661
# CHECK-NEXT: 1 2 2.00 vmla.i8 q0, q2, r0
662662
# CHECK-NEXT: 1 2 2.00 vmla.i16 q0, q2, r0
663663
# CHECK-NEXT: 1 2 2.00 vmla.i32 q0, q2, r0

0 commit comments

Comments
 (0)