@@ -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
531613entry:
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
628792entry:
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
725971entry:
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
10911335entry:
0 commit comments