Skip to content

Commit 14d61d1

Browse files
- Only consider removing PTest if opcode is PTEST_PP_FIRST
- Remove redundant mir tests
1 parent db86d4b commit 14d61d1

9 files changed

+55
-704
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1614,7 +1614,7 @@ bool AArch64InstrInfo::optimizePTestInstr(
16141614
auto *Mask = MRI->getUniqueVRegDef(MaskReg);
16151615
auto *Pred = MRI->getUniqueVRegDef(PredReg);
16161616

1617-
if (Pred->isCopy()) {
1617+
if (Pred->isCopy() && PTest->getOpcode() == AArch64::PTEST_PP_FIRST) {
16181618
// Instructions which return a multi-vector (e.g. WHILECC_x2) require copies
16191619
// before the branch to extract each subregister.
16201620
auto Op = Pred->getOperand(1);

llvm/test/CodeGen/AArch64/sve-ptest-removal-whilege.mir

Lines changed: 0 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -538,103 +538,3 @@ body: |
538538
RET_ReallyLR implicit $w0
539539
540540
...
541-
542-
# WHILEGE (predicate pair)
543-
---
544-
name: whilege_x2_b64_s64
545-
alignment: 2
546-
tracksRegLiveness: true
547-
registers:
548-
- { id: 0, class: gpr64 }
549-
- { id: 1, class: gpr64 }
550-
- { id: 2, class: ppr }
551-
- { id: 3, class: ppr2mul2 }
552-
- { id: 4, class: ppr }
553-
- { id: 5, class: ppr }
554-
- { id: 6, class: gpr32 }
555-
- { id: 7, class: gpr32 }
556-
liveins:
557-
- { reg: '$x0', virtual-reg: '%0' }
558-
- { reg: '$x1', virtual-reg: '%1' }
559-
frameInfo:
560-
maxCallFrameSize: 0
561-
body: |
562-
bb.0.entry:
563-
liveins: $x0, $x1
564-
565-
; CHECK-LABEL: name: whilege_x2_b64_s64
566-
; CHECK: liveins: $x0, $x1
567-
; CHECK-NEXT: {{ $}}
568-
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
569-
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
570-
; CHECK-NEXT: [[PTRUE_D:%[0-9]+]]:ppr = PTRUE_D 31, implicit $vg
571-
; CHECK-NEXT: [[WHILEGE_2PXX_D:%[0-9]+]]:ppr2mul2 = WHILEGE_2PXX_D [[COPY]], [[COPY1]], implicit-def $nzcv
572-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:ppr = COPY [[WHILEGE_2PXX_D]].psub0
573-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:ppr = COPY [[WHILEGE_2PXX_D]].psub1
574-
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
575-
; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr [[COPY4]], $wzr, 0, implicit $nzcv
576-
; CHECK-NEXT: $w0 = COPY [[CSINCWr]]
577-
; CHECK-NEXT: RET_ReallyLR implicit $w0
578-
%0:gpr64 = COPY $x0
579-
%1:gpr64 = COPY $x1
580-
%2:ppr = PTRUE_D 31, implicit $vg
581-
%3:ppr2mul2 = WHILEGE_2PXX_D %0, %1, implicit-def $nzcv
582-
%4:ppr = COPY %3.psub0
583-
%5:ppr = COPY %3.psub1
584-
PTEST_PP killed %2, killed %4, implicit-def $nzcv
585-
%6:gpr32 = COPY $wzr
586-
%7:gpr32 = CSINCWr %6, $wzr, 0, implicit $nzcv
587-
$w0 = COPY %7
588-
RET_ReallyLR implicit $w0
589-
...
590-
591-
# PTEST is not redundant when it's Pg operand is a subregister copy, but not
592-
# from the first subregister of ppr2mul2
593-
---
594-
name: whilege_x2_b64_s64_psub1
595-
alignment: 2
596-
tracksRegLiveness: true
597-
registers:
598-
- { id: 0, class: gpr64 }
599-
- { id: 1, class: gpr64 }
600-
- { id: 2, class: ppr }
601-
- { id: 3, class: ppr2mul2 }
602-
- { id: 4, class: ppr }
603-
- { id: 5, class: ppr }
604-
- { id: 6, class: gpr32 }
605-
- { id: 7, class: gpr32 }
606-
liveins:
607-
- { reg: '$x0', virtual-reg: '%0' }
608-
- { reg: '$x1', virtual-reg: '%1' }
609-
frameInfo:
610-
maxCallFrameSize: 0
611-
body: |
612-
bb.0.entry:
613-
liveins: $x0, $x1
614-
615-
; CHECK-LABEL: name: whilege_x2_b64_s64_psub1
616-
; CHECK: liveins: $x0, $x1
617-
; CHECK-NEXT: {{ $}}
618-
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
619-
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
620-
; CHECK-NEXT: [[PTRUE_D:%[0-9]+]]:ppr = PTRUE_D 31, implicit $vg
621-
; CHECK-NEXT: [[WHILEGE_2PXX_D:%[0-9]+]]:ppr2mul2 = WHILEGE_2PXX_D [[COPY]], [[COPY1]], implicit-def $nzcv
622-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:ppr = COPY [[WHILEGE_2PXX_D]].psub0
623-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:ppr = COPY [[WHILEGE_2PXX_D]].psub1
624-
; CHECK-NEXT: PTEST_PP killed [[PTRUE_D]], killed [[COPY3]], implicit-def $nzcv
625-
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
626-
; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr [[COPY4]], $wzr, 0, implicit $nzcv
627-
; CHECK-NEXT: $w0 = COPY [[CSINCWr]]
628-
; CHECK-NEXT: RET_ReallyLR implicit $w0
629-
%0:gpr64 = COPY $x0
630-
%1:gpr64 = COPY $x1
631-
%2:ppr = PTRUE_D 31, implicit $vg
632-
%3:ppr2mul2 = WHILEGE_2PXX_D %0, %1, implicit-def $nzcv
633-
%4:ppr = COPY %3.psub0
634-
%5:ppr = COPY %3.psub1
635-
PTEST_PP killed %2, killed %5, implicit-def $nzcv
636-
%6:gpr32 = COPY $wzr
637-
%7:gpr32 = CSINCWr %6, $wzr, 0, implicit $nzcv
638-
$w0 = COPY %7
639-
RET_ReallyLR implicit $w0
640-
...

llvm/test/CodeGen/AArch64/sve-ptest-removal-whilegt.mir

Lines changed: 0 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -578,103 +578,3 @@ body: |
578578
RET_ReallyLR implicit $w0
579579
580580
...
581-
582-
# WHILEGT (predicate pair)
583-
---
584-
name: whilegt_x2_b64_s64
585-
alignment: 2
586-
tracksRegLiveness: true
587-
registers:
588-
- { id: 0, class: gpr64 }
589-
- { id: 1, class: gpr64 }
590-
- { id: 2, class: ppr }
591-
- { id: 3, class: ppr2mul2 }
592-
- { id: 4, class: ppr }
593-
- { id: 5, class: ppr }
594-
- { id: 6, class: gpr32 }
595-
- { id: 7, class: gpr32 }
596-
liveins:
597-
- { reg: '$x0', virtual-reg: '%0' }
598-
- { reg: '$x1', virtual-reg: '%1' }
599-
frameInfo:
600-
maxCallFrameSize: 0
601-
body: |
602-
bb.0.entry:
603-
liveins: $x0, $x1
604-
605-
; CHECK-LABEL: name: whilegt_x2_b64_s64
606-
; CHECK: liveins: $x0, $x1
607-
; CHECK-NEXT: {{ $}}
608-
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
609-
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
610-
; CHECK-NEXT: [[PTRUE_D:%[0-9]+]]:ppr = PTRUE_D 31, implicit $vg
611-
; CHECK-NEXT: [[WHILEGT_2PXX_D:%[0-9]+]]:ppr2mul2 = WHILEGT_2PXX_D [[COPY]], [[COPY1]], implicit-def $nzcv
612-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:ppr = COPY [[WHILEGT_2PXX_D]].psub0
613-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:ppr = COPY [[WHILEGT_2PXX_D]].psub1
614-
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
615-
; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr [[COPY4]], $wzr, 0, implicit $nzcv
616-
; CHECK-NEXT: $w0 = COPY [[CSINCWr]]
617-
; CHECK-NEXT: RET_ReallyLR implicit $w0
618-
%0:gpr64 = COPY $x0
619-
%1:gpr64 = COPY $x1
620-
%2:ppr = PTRUE_D 31, implicit $vg
621-
%3:ppr2mul2 = WHILEGT_2PXX_D %0, %1, implicit-def $nzcv
622-
%4:ppr = COPY %3.psub0
623-
%5:ppr = COPY %3.psub1
624-
PTEST_PP killed %2, killed %4, implicit-def $nzcv
625-
%6:gpr32 = COPY $wzr
626-
%7:gpr32 = CSINCWr %6, $wzr, 0, implicit $nzcv
627-
$w0 = COPY %7
628-
RET_ReallyLR implicit $w0
629-
...
630-
631-
# PTEST is not redundant when it's Pg operand is a subregister copy, but not
632-
# from the first subregister of ppr2mul2
633-
---
634-
name: whilegt_x2_b64_s64_psub1
635-
alignment: 2
636-
tracksRegLiveness: true
637-
registers:
638-
- { id: 0, class: gpr64 }
639-
- { id: 1, class: gpr64 }
640-
- { id: 2, class: ppr }
641-
- { id: 3, class: ppr2mul2 }
642-
- { id: 4, class: ppr }
643-
- { id: 5, class: ppr }
644-
- { id: 6, class: gpr32 }
645-
- { id: 7, class: gpr32 }
646-
liveins:
647-
- { reg: '$x0', virtual-reg: '%0' }
648-
- { reg: '$x1', virtual-reg: '%1' }
649-
frameInfo:
650-
maxCallFrameSize: 0
651-
body: |
652-
bb.0.entry:
653-
liveins: $x0, $x1
654-
655-
; CHECK-LABEL: name: whilegt_x2_b64_s64_psub1
656-
; CHECK: liveins: $x0, $x1
657-
; CHECK-NEXT: {{ $}}
658-
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
659-
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
660-
; CHECK-NEXT: [[PTRUE_D:%[0-9]+]]:ppr = PTRUE_D 31, implicit $vg
661-
; CHECK-NEXT: [[WHILEGT_2PXX_D:%[0-9]+]]:ppr2mul2 = WHILEGT_2PXX_D [[COPY]], [[COPY1]], implicit-def $nzcv
662-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:ppr = COPY [[WHILEGT_2PXX_D]].psub0
663-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:ppr = COPY [[WHILEGT_2PXX_D]].psub1
664-
; CHECK-NEXT: PTEST_PP killed [[PTRUE_D]], killed [[COPY3]], implicit-def $nzcv
665-
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
666-
; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr [[COPY4]], $wzr, 0, implicit $nzcv
667-
; CHECK-NEXT: $w0 = COPY [[CSINCWr]]
668-
; CHECK-NEXT: RET_ReallyLR implicit $w0
669-
%0:gpr64 = COPY $x0
670-
%1:gpr64 = COPY $x1
671-
%2:ppr = PTRUE_D 31, implicit $vg
672-
%3:ppr2mul2 = WHILEGT_2PXX_D %0, %1, implicit-def $nzcv
673-
%4:ppr = COPY %3.psub0
674-
%5:ppr = COPY %3.psub1
675-
PTEST_PP killed %2, killed %5, implicit-def $nzcv
676-
%6:gpr32 = COPY $wzr
677-
%7:gpr32 = CSINCWr %6, $wzr, 0, implicit $nzcv
678-
$w0 = COPY %7
679-
RET_ReallyLR implicit $w0
680-
...

llvm/test/CodeGen/AArch64/sve-ptest-removal-whilehi.mir

Lines changed: 0 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -538,103 +538,3 @@ body: |
538538
RET_ReallyLR implicit $w0
539539
540540
...
541-
542-
# WHILEHI (predicate pair)
543-
---
544-
name: whilehi_x2_b64_s64
545-
alignment: 2
546-
tracksRegLiveness: true
547-
registers:
548-
- { id: 0, class: gpr64 }
549-
- { id: 1, class: gpr64 }
550-
- { id: 2, class: ppr }
551-
- { id: 3, class: ppr2mul2 }
552-
- { id: 4, class: ppr }
553-
- { id: 5, class: ppr }
554-
- { id: 6, class: gpr32 }
555-
- { id: 7, class: gpr32 }
556-
liveins:
557-
- { reg: '$x0', virtual-reg: '%0' }
558-
- { reg: '$x1', virtual-reg: '%1' }
559-
frameInfo:
560-
maxCallFrameSize: 0
561-
body: |
562-
bb.0.entry:
563-
liveins: $x0, $x1
564-
565-
; CHECK-LABEL: name: whilehi_x2_b64_s64
566-
; CHECK: liveins: $x0, $x1
567-
; CHECK-NEXT: {{ $}}
568-
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
569-
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
570-
; CHECK-NEXT: [[PTRUE_D:%[0-9]+]]:ppr = PTRUE_D 31, implicit $vg
571-
; CHECK-NEXT: [[WHILEHI_2PXX_D:%[0-9]+]]:ppr2mul2 = WHILEHI_2PXX_D [[COPY]], [[COPY1]], implicit-def $nzcv
572-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:ppr = COPY [[WHILEHI_2PXX_D]].psub0
573-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:ppr = COPY [[WHILEHI_2PXX_D]].psub1
574-
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
575-
; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr [[COPY4]], $wzr, 0, implicit $nzcv
576-
; CHECK-NEXT: $w0 = COPY [[CSINCWr]]
577-
; CHECK-NEXT: RET_ReallyLR implicit $w0
578-
%0:gpr64 = COPY $x0
579-
%1:gpr64 = COPY $x1
580-
%2:ppr = PTRUE_D 31, implicit $vg
581-
%3:ppr2mul2 = WHILEHI_2PXX_D %0, %1, implicit-def $nzcv
582-
%4:ppr = COPY %3.psub0
583-
%5:ppr = COPY %3.psub1
584-
PTEST_PP killed %2, killed %4, implicit-def $nzcv
585-
%6:gpr32 = COPY $wzr
586-
%7:gpr32 = CSINCWr %6, $wzr, 0, implicit $nzcv
587-
$w0 = COPY %7
588-
RET_ReallyLR implicit $w0
589-
...
590-
591-
# PTEST is not redundant when it's Pg operand is a subregister copy, but not
592-
# from the first subregister of ppr2mul2
593-
---
594-
name: whilehi_x2_b64_s64_psub1
595-
alignment: 2
596-
tracksRegLiveness: true
597-
registers:
598-
- { id: 0, class: gpr64 }
599-
- { id: 1, class: gpr64 }
600-
- { id: 2, class: ppr }
601-
- { id: 3, class: ppr2mul2 }
602-
- { id: 4, class: ppr }
603-
- { id: 5, class: ppr }
604-
- { id: 6, class: gpr32 }
605-
- { id: 7, class: gpr32 }
606-
liveins:
607-
- { reg: '$x0', virtual-reg: '%0' }
608-
- { reg: '$x1', virtual-reg: '%1' }
609-
frameInfo:
610-
maxCallFrameSize: 0
611-
body: |
612-
bb.0.entry:
613-
liveins: $x0, $x1
614-
615-
; CHECK-LABEL: name: whilehi_x2_b64_s64_psub1
616-
; CHECK: liveins: $x0, $x1
617-
; CHECK-NEXT: {{ $}}
618-
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
619-
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
620-
; CHECK-NEXT: [[PTRUE_D:%[0-9]+]]:ppr = PTRUE_D 31, implicit $vg
621-
; CHECK-NEXT: [[WHILEHI_2PXX_D:%[0-9]+]]:ppr2mul2 = WHILEHI_2PXX_D [[COPY]], [[COPY1]], implicit-def $nzcv
622-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:ppr = COPY [[WHILEHI_2PXX_D]].psub0
623-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:ppr = COPY [[WHILEHI_2PXX_D]].psub1
624-
; CHECK-NEXT: PTEST_PP killed [[PTRUE_D]], killed [[COPY3]], implicit-def $nzcv
625-
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
626-
; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr [[COPY4]], $wzr, 0, implicit $nzcv
627-
; CHECK-NEXT: $w0 = COPY [[CSINCWr]]
628-
; CHECK-NEXT: RET_ReallyLR implicit $w0
629-
%0:gpr64 = COPY $x0
630-
%1:gpr64 = COPY $x1
631-
%2:ppr = PTRUE_D 31, implicit $vg
632-
%3:ppr2mul2 = WHILEHI_2PXX_D %0, %1, implicit-def $nzcv
633-
%4:ppr = COPY %3.psub0
634-
%5:ppr = COPY %3.psub1
635-
PTEST_PP killed %2, killed %5, implicit-def $nzcv
636-
%6:gpr32 = COPY $wzr
637-
%7:gpr32 = CSINCWr %6, $wzr, 0, implicit $nzcv
638-
$w0 = COPY %7
639-
RET_ReallyLR implicit $w0
640-
...

0 commit comments

Comments
 (0)