Skip to content

Commit 1711521

Browse files
committed
Change to XLen + 1
Created using spr 1.3.6-beta.1
1 parent 32d987d commit 1711521

File tree

3 files changed

+570
-82
lines changed

3 files changed

+570
-82
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2956,8 +2956,8 @@ RISCVTTIImpl::enableMemCmpExpansion(bool OptSize, bool IsZeroCmp) const {
29562956
if (IsZeroCmp && ST->hasVInstructions()) {
29572957
unsigned VLenB = ST->getRealMinVLen() / 8;
29582958
// The minimum size should be the maximum bytes between `VLen * LMUL_MF8`
2959-
// and `XLen * 2`.
2960-
unsigned MinSize = std::max(VLenB / 8, ST->getXLen() * 2 / 8);
2959+
// and `XLen + 1`.
2960+
unsigned MinSize = std::max(VLenB / 8, ST->getXLen() / 8 + 1);
29612961
for (unsigned Size = MinSize;
29622962
Size <= VLenB * ST->getMaxLMULForFixedLengthVectors(); Size++)
29632963
Options.LoadSizes.insert(Options.LoadSizes.begin(), Size);

llvm/test/CodeGen/RISCV/memcmp-optsize.ll

Lines changed: 284 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -517,17 +517,99 @@ define i32 @bcmp_size_5(ptr %s1, ptr %s2) nounwind optsize {
517517
; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16
518518
; CHECK-ALIGNED-RV64-V-NEXT: ret
519519
;
520-
; CHECK-UNALIGNED-LABEL: bcmp_size_5:
521-
; CHECK-UNALIGNED: # %bb.0: # %entry
522-
; CHECK-UNALIGNED-NEXT: lw a2, 0(a0)
523-
; CHECK-UNALIGNED-NEXT: lbu a0, 4(a0)
524-
; CHECK-UNALIGNED-NEXT: lw a3, 0(a1)
525-
; CHECK-UNALIGNED-NEXT: lbu a1, 4(a1)
526-
; CHECK-UNALIGNED-NEXT: xor a2, a2, a3
527-
; CHECK-UNALIGNED-NEXT: xor a0, a0, a1
528-
; CHECK-UNALIGNED-NEXT: or a0, a2, a0
529-
; CHECK-UNALIGNED-NEXT: snez a0, a0
530-
; CHECK-UNALIGNED-NEXT: ret
520+
; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_5:
521+
; CHECK-UNALIGNED-RV32: # %bb.0: # %entry
522+
; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0)
523+
; CHECK-UNALIGNED-RV32-NEXT: lbu a0, 4(a0)
524+
; CHECK-UNALIGNED-RV32-NEXT: lw a3, 0(a1)
525+
; CHECK-UNALIGNED-RV32-NEXT: lbu a1, 4(a1)
526+
; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a3
527+
; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1
528+
; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0
529+
; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0
530+
; CHECK-UNALIGNED-RV32-NEXT: ret
531+
;
532+
; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_5:
533+
; CHECK-UNALIGNED-RV64: # %bb.0: # %entry
534+
; CHECK-UNALIGNED-RV64-NEXT: lw a2, 0(a0)
535+
; CHECK-UNALIGNED-RV64-NEXT: lbu a0, 4(a0)
536+
; CHECK-UNALIGNED-RV64-NEXT: lw a3, 0(a1)
537+
; CHECK-UNALIGNED-RV64-NEXT: lbu a1, 4(a1)
538+
; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a3
539+
; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1
540+
; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0
541+
; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0
542+
; CHECK-UNALIGNED-RV64-NEXT: ret
543+
;
544+
; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_5:
545+
; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry
546+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0)
547+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a0, 4(a0)
548+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1)
549+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a1, 4(a1)
550+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a3
551+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1
552+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0
553+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0
554+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret
555+
;
556+
; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_5:
557+
; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry
558+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a2, 0(a0)
559+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a0, 4(a0)
560+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a3, 0(a1)
561+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a1, 4(a1)
562+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a3
563+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1
564+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0
565+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0
566+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret
567+
;
568+
; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_5:
569+
; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry
570+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0)
571+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a0, 4(a0)
572+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1)
573+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a1, 4(a1)
574+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a3
575+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1
576+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0
577+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0
578+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret
579+
;
580+
; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_5:
581+
; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry
582+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a2, 0(a0)
583+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a0, 4(a0)
584+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a3, 0(a1)
585+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a1, 4(a1)
586+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a3
587+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1
588+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0
589+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0
590+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret
591+
;
592+
; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_5:
593+
; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry
594+
; CHECK-UNALIGNED-RV32-V-NEXT: vsetivli zero, 5, e8, mf2, ta, ma
595+
; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v8, (a0)
596+
; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v9, (a1)
597+
; CHECK-UNALIGNED-RV32-V-NEXT: vmsne.vv v8, v8, v9
598+
; CHECK-UNALIGNED-RV32-V-NEXT: vcpop.m a0, v8
599+
; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0
600+
; CHECK-UNALIGNED-RV32-V-NEXT: ret
601+
;
602+
; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_5:
603+
; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry
604+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a2, 0(a0)
605+
; CHECK-UNALIGNED-RV64-V-NEXT: lbu a0, 4(a0)
606+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a3, 0(a1)
607+
; CHECK-UNALIGNED-RV64-V-NEXT: lbu a1, 4(a1)
608+
; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a3
609+
; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1
610+
; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0
611+
; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0
612+
; CHECK-UNALIGNED-RV64-V-NEXT: ret
531613
entry:
532614
%bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 5)
533615
ret i32 %bcmp
@@ -614,17 +696,99 @@ define i32 @bcmp_size_6(ptr %s1, ptr %s2) nounwind optsize {
614696
; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16
615697
; CHECK-ALIGNED-RV64-V-NEXT: ret
616698
;
617-
; CHECK-UNALIGNED-LABEL: bcmp_size_6:
618-
; CHECK-UNALIGNED: # %bb.0: # %entry
619-
; CHECK-UNALIGNED-NEXT: lw a2, 0(a0)
620-
; CHECK-UNALIGNED-NEXT: lhu a0, 4(a0)
621-
; CHECK-UNALIGNED-NEXT: lw a3, 0(a1)
622-
; CHECK-UNALIGNED-NEXT: lhu a1, 4(a1)
623-
; CHECK-UNALIGNED-NEXT: xor a2, a2, a3
624-
; CHECK-UNALIGNED-NEXT: xor a0, a0, a1
625-
; CHECK-UNALIGNED-NEXT: or a0, a2, a0
626-
; CHECK-UNALIGNED-NEXT: snez a0, a0
627-
; CHECK-UNALIGNED-NEXT: ret
699+
; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_6:
700+
; CHECK-UNALIGNED-RV32: # %bb.0: # %entry
701+
; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0)
702+
; CHECK-UNALIGNED-RV32-NEXT: lhu a0, 4(a0)
703+
; CHECK-UNALIGNED-RV32-NEXT: lw a3, 0(a1)
704+
; CHECK-UNALIGNED-RV32-NEXT: lhu a1, 4(a1)
705+
; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a3
706+
; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1
707+
; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0
708+
; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0
709+
; CHECK-UNALIGNED-RV32-NEXT: ret
710+
;
711+
; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_6:
712+
; CHECK-UNALIGNED-RV64: # %bb.0: # %entry
713+
; CHECK-UNALIGNED-RV64-NEXT: lw a2, 0(a0)
714+
; CHECK-UNALIGNED-RV64-NEXT: lhu a0, 4(a0)
715+
; CHECK-UNALIGNED-RV64-NEXT: lw a3, 0(a1)
716+
; CHECK-UNALIGNED-RV64-NEXT: lhu a1, 4(a1)
717+
; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a3
718+
; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1
719+
; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0
720+
; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0
721+
; CHECK-UNALIGNED-RV64-NEXT: ret
722+
;
723+
; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_6:
724+
; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry
725+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0)
726+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lhu a0, 4(a0)
727+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1)
728+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lhu a1, 4(a1)
729+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a3
730+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1
731+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0
732+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0
733+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret
734+
;
735+
; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_6:
736+
; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry
737+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a2, 0(a0)
738+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lhu a0, 4(a0)
739+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a3, 0(a1)
740+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lhu a1, 4(a1)
741+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a3
742+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1
743+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0
744+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0
745+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret
746+
;
747+
; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_6:
748+
; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry
749+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0)
750+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lhu a0, 4(a0)
751+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1)
752+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lhu a1, 4(a1)
753+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a3
754+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1
755+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0
756+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0
757+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret
758+
;
759+
; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_6:
760+
; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry
761+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a2, 0(a0)
762+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lhu a0, 4(a0)
763+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a3, 0(a1)
764+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lhu a1, 4(a1)
765+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a3
766+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1
767+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0
768+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0
769+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret
770+
;
771+
; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_6:
772+
; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry
773+
; CHECK-UNALIGNED-RV32-V-NEXT: vsetivli zero, 6, e8, mf2, ta, ma
774+
; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v8, (a0)
775+
; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v9, (a1)
776+
; CHECK-UNALIGNED-RV32-V-NEXT: vmsne.vv v8, v8, v9
777+
; CHECK-UNALIGNED-RV32-V-NEXT: vcpop.m a0, v8
778+
; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0
779+
; CHECK-UNALIGNED-RV32-V-NEXT: ret
780+
;
781+
; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_6:
782+
; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry
783+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a2, 0(a0)
784+
; CHECK-UNALIGNED-RV64-V-NEXT: lhu a0, 4(a0)
785+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a3, 0(a1)
786+
; CHECK-UNALIGNED-RV64-V-NEXT: lhu a1, 4(a1)
787+
; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a3
788+
; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1
789+
; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0
790+
; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0
791+
; CHECK-UNALIGNED-RV64-V-NEXT: ret
628792
entry:
629793
%bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 6)
630794
ret i32 %bcmp
@@ -711,17 +875,99 @@ define i32 @bcmp_size_7(ptr %s1, ptr %s2) nounwind optsize {
711875
; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16
712876
; CHECK-ALIGNED-RV64-V-NEXT: ret
713877
;
714-
; CHECK-UNALIGNED-LABEL: bcmp_size_7:
715-
; CHECK-UNALIGNED: # %bb.0: # %entry
716-
; CHECK-UNALIGNED-NEXT: lw a2, 0(a0)
717-
; CHECK-UNALIGNED-NEXT: lw a0, 3(a0)
718-
; CHECK-UNALIGNED-NEXT: lw a3, 0(a1)
719-
; CHECK-UNALIGNED-NEXT: lw a1, 3(a1)
720-
; CHECK-UNALIGNED-NEXT: xor a2, a2, a3
721-
; CHECK-UNALIGNED-NEXT: xor a0, a0, a1
722-
; CHECK-UNALIGNED-NEXT: or a0, a2, a0
723-
; CHECK-UNALIGNED-NEXT: snez a0, a0
724-
; CHECK-UNALIGNED-NEXT: ret
878+
; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_7:
879+
; CHECK-UNALIGNED-RV32: # %bb.0: # %entry
880+
; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0)
881+
; CHECK-UNALIGNED-RV32-NEXT: lw a0, 3(a0)
882+
; CHECK-UNALIGNED-RV32-NEXT: lw a3, 0(a1)
883+
; CHECK-UNALIGNED-RV32-NEXT: lw a1, 3(a1)
884+
; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a3
885+
; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1
886+
; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0
887+
; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0
888+
; CHECK-UNALIGNED-RV32-NEXT: ret
889+
;
890+
; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_7:
891+
; CHECK-UNALIGNED-RV64: # %bb.0: # %entry
892+
; CHECK-UNALIGNED-RV64-NEXT: lw a2, 0(a0)
893+
; CHECK-UNALIGNED-RV64-NEXT: lw a0, 3(a0)
894+
; CHECK-UNALIGNED-RV64-NEXT: lw a3, 0(a1)
895+
; CHECK-UNALIGNED-RV64-NEXT: lw a1, 3(a1)
896+
; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a3
897+
; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1
898+
; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0
899+
; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0
900+
; CHECK-UNALIGNED-RV64-NEXT: ret
901+
;
902+
; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_7:
903+
; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry
904+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0)
905+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 3(a0)
906+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1)
907+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 3(a1)
908+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a3
909+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1
910+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0
911+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0
912+
; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret
913+
;
914+
; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_7:
915+
; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry
916+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a2, 0(a0)
917+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a0, 3(a0)
918+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a3, 0(a1)
919+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a1, 3(a1)
920+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a3
921+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1
922+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0
923+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0
924+
; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret
925+
;
926+
; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_7:
927+
; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry
928+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0)
929+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 3(a0)
930+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1)
931+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 3(a1)
932+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a3
933+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1
934+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0
935+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0
936+
; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret
937+
;
938+
; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_7:
939+
; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry
940+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a2, 0(a0)
941+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a0, 3(a0)
942+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a3, 0(a1)
943+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a1, 3(a1)
944+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a3
945+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1
946+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0
947+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0
948+
; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret
949+
;
950+
; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_7:
951+
; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry
952+
; CHECK-UNALIGNED-RV32-V-NEXT: vsetivli zero, 7, e8, mf2, ta, ma
953+
; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v8, (a0)
954+
; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v9, (a1)
955+
; CHECK-UNALIGNED-RV32-V-NEXT: vmsne.vv v8, v8, v9
956+
; CHECK-UNALIGNED-RV32-V-NEXT: vcpop.m a0, v8
957+
; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0
958+
; CHECK-UNALIGNED-RV32-V-NEXT: ret
959+
;
960+
; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_7:
961+
; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry
962+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a2, 0(a0)
963+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a0, 3(a0)
964+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a3, 0(a1)
965+
; CHECK-UNALIGNED-RV64-V-NEXT: lw a1, 3(a1)
966+
; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a3
967+
; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1
968+
; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0
969+
; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0
970+
; CHECK-UNALIGNED-RV64-V-NEXT: ret
725971
entry:
726972
%bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 7)
727973
ret i32 %bcmp
@@ -1079,13 +1325,11 @@ define i32 @bcmp_size_15(ptr %s1, ptr %s2) nounwind optsize {
10791325
;
10801326
; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_15:
10811327
; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry
1082-
; CHECK-UNALIGNED-RV64-V-NEXT: ld a2, 0(a0)
1083-
; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 7(a0)
1084-
; CHECK-UNALIGNED-RV64-V-NEXT: ld a3, 0(a1)
1085-
; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 7(a1)
1086-
; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a3
1087-
; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1
1088-
; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0
1328+
; CHECK-UNALIGNED-RV64-V-NEXT: vsetivli zero, 15, e8, m1, ta, ma
1329+
; CHECK-UNALIGNED-RV64-V-NEXT: vle8.v v8, (a0)
1330+
; CHECK-UNALIGNED-RV64-V-NEXT: vle8.v v9, (a1)
1331+
; CHECK-UNALIGNED-RV64-V-NEXT: vmsne.vv v8, v8, v9
1332+
; CHECK-UNALIGNED-RV64-V-NEXT: vcpop.m a0, v8
10891333
; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0
10901334
; CHECK-UNALIGNED-RV64-V-NEXT: ret
10911335
entry:

0 commit comments

Comments
 (0)