@@ -544,3 +544,131 @@ define %svboolx2 @and_of_multiuse_fcmp_olt_zero(<vscale x 4 x i1> %pg, <vscale x
544
544
%ins.2 = insertvalue %svboolx2 %ins.1 , <vscale x 4 x i1 > %cmp , 1
545
545
ret %svboolx2 %ins.2
546
546
}
547
+
548
+ define <vscale x 8 x i1 > @logical_and_oeq_zero_pred (<vscale x 8 x i1 > %pg , <vscale x 8 x half > %x ) {
549
+ ; CHECK-LABEL: logical_and_oeq_zero_pred:
550
+ ; CHECK: // %bb.0:
551
+ ; CHECK-NEXT: ptrue p1.h
552
+ ; CHECK-NEXT: fcmeq p1.h, p1/z, z0.h, #0.0
553
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
554
+ ; CHECK-NEXT: ret
555
+ %y = fcmp oeq <vscale x 8 x half > %x , zeroinitializer
556
+ %z = select <vscale x 8 x i1 > %pg , <vscale x 8 x i1 > %y , <vscale x 8 x i1 > zeroinitializer
557
+ ret <vscale x 8 x i1 > %z
558
+ }
559
+
560
+ define <vscale x 4 x i1 > @logical_and_ogt_zero_pred (<vscale x 4 x i1 > %pg , <vscale x 4 x half > %x ) {
561
+ ; CHECK-LABEL: logical_and_ogt_zero_pred:
562
+ ; CHECK: // %bb.0:
563
+ ; CHECK-NEXT: ptrue p1.s
564
+ ; CHECK-NEXT: fcmgt p1.h, p1/z, z0.h, #0.0
565
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
566
+ ; CHECK-NEXT: ret
567
+ %y = fcmp ogt <vscale x 4 x half > %x , zeroinitializer
568
+ %z = select <vscale x 4 x i1 > %pg , <vscale x 4 x i1 > %y , <vscale x 4 x i1 > zeroinitializer
569
+ ret <vscale x 4 x i1 > %z
570
+ }
571
+
572
+ define <vscale x 2 x i1 > @logical_and_oge_zero_pred (<vscale x 2 x i1 > %pg , <vscale x 2 x half > %x ) {
573
+ ; CHECK-LABEL: logical_and_oge_zero_pred:
574
+ ; CHECK: // %bb.0:
575
+ ; CHECK-NEXT: ptrue p1.d
576
+ ; CHECK-NEXT: fcmge p1.h, p1/z, z0.h, #0.0
577
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
578
+ ; CHECK-NEXT: ret
579
+ %y = fcmp oge <vscale x 2 x half > %x , zeroinitializer
580
+ %z = select <vscale x 2 x i1 > %pg , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > zeroinitializer
581
+ ret <vscale x 2 x i1 > %z
582
+ }
583
+
584
+ define <vscale x 4 x i1 > @logical_and_olt_zero_pred (<vscale x 4 x i1 > %pg , <vscale x 4 x float > %x ) {
585
+ ; CHECK-LABEL: logical_and_olt_zero_pred:
586
+ ; CHECK: // %bb.0:
587
+ ; CHECK-NEXT: ptrue p1.s
588
+ ; CHECK-NEXT: fcmlt p1.s, p1/z, z0.s, #0.0
589
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
590
+ ; CHECK-NEXT: ret
591
+ %y = fcmp olt <vscale x 4 x float > %x , zeroinitializer
592
+ %z = select <vscale x 4 x i1 > %pg , <vscale x 4 x i1 > %y , <vscale x 4 x i1 > zeroinitializer
593
+ ret <vscale x 4 x i1 > %z
594
+ }
595
+
596
+ define <vscale x 2 x i1 > @logical_and_ole_zero_pred (<vscale x 2 x i1 > %pg , <vscale x 2 x float > %x ) {
597
+ ; CHECK-LABEL: logical_and_ole_zero_pred:
598
+ ; CHECK: // %bb.0:
599
+ ; CHECK-NEXT: ptrue p1.d
600
+ ; CHECK-NEXT: fcmle p1.s, p1/z, z0.s, #0.0
601
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
602
+ ; CHECK-NEXT: ret
603
+ %y = fcmp ole <vscale x 2 x float > %x , zeroinitializer
604
+ %z = select <vscale x 2 x i1 > %pg , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > zeroinitializer
605
+ ret <vscale x 2 x i1 > %z
606
+ }
607
+
608
+ define <vscale x 2 x i1 > @logical_and_une_zero_pred (<vscale x 2 x i1 > %pg , <vscale x 2 x double > %x ) {
609
+ ; CHECK-LABEL: logical_and_une_zero_pred:
610
+ ; CHECK: // %bb.0:
611
+ ; CHECK-NEXT: ptrue p1.d
612
+ ; CHECK-NEXT: fcmne p1.d, p1/z, z0.d, #0.0
613
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
614
+ ; CHECK-NEXT: ret
615
+ %y = fcmp une <vscale x 2 x double > %x , zeroinitializer
616
+ %z = select <vscale x 2 x i1 > %pg , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > zeroinitializer
617
+ ret <vscale x 2 x i1 > %z
618
+ }
619
+
620
+ define %svboolx2 @logical_and_of_multiuse_fcmp_ogt (<vscale x 4 x i1 > %pg , <vscale x 4 x float > %x , <vscale x 4 x float > %y ) {
621
+ ; CHECK-LABEL: logical_and_of_multiuse_fcmp_ogt:
622
+ ; CHECK: // %bb.0:
623
+ ; CHECK-NEXT: ptrue p1.s
624
+ ; CHECK-NEXT: fcmgt p1.s, p1/z, z0.s, z1.s
625
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
626
+ ; CHECK-NEXT: ret
627
+ %cmp = fcmp ogt <vscale x 4 x float > %x , %y
628
+ %and = select <vscale x 4 x i1 > %pg , <vscale x 4 x i1 > %cmp , <vscale x 4 x i1 > zeroinitializer
629
+ %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1 > %and , 0
630
+ %ins.2 = insertvalue %svboolx2 %ins.1 , <vscale x 4 x i1 > %cmp , 1
631
+ ret %svboolx2 %ins.2
632
+ }
633
+
634
+ define %svboolx2 @logical_and_of_multiuse_fcmp_ogt_zero (<vscale x 4 x i1 > %pg , <vscale x 4 x float > %x ) {
635
+ ; CHECK-LABEL: logical_and_of_multiuse_fcmp_ogt_zero:
636
+ ; CHECK: // %bb.0:
637
+ ; CHECK-NEXT: ptrue p1.s
638
+ ; CHECK-NEXT: fcmgt p1.s, p1/z, z0.s, #0.0
639
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
640
+ ; CHECK-NEXT: ret
641
+ %cmp = fcmp ogt <vscale x 4 x float > %x , zeroinitializer
642
+ %and = select <vscale x 4 x i1 > %pg , <vscale x 4 x i1 > %cmp , <vscale x 4 x i1 > zeroinitializer
643
+ %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1 > %and , 0
644
+ %ins.2 = insertvalue %svboolx2 %ins.1 , <vscale x 4 x i1 > %cmp , 1
645
+ ret %svboolx2 %ins.2
646
+ }
647
+
648
+ define %svboolx2 @logical_and_of_multiuse_fcmp_olt (<vscale x 4 x i1 > %pg , <vscale x 4 x float > %x , <vscale x 4 x float > %y ) {
649
+ ; CHECK-LABEL: logical_and_of_multiuse_fcmp_olt:
650
+ ; CHECK: // %bb.0:
651
+ ; CHECK-NEXT: ptrue p1.s
652
+ ; CHECK-NEXT: fcmgt p1.s, p1/z, z1.s, z0.s
653
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
654
+ ; CHECK-NEXT: ret
655
+ %cmp = fcmp olt <vscale x 4 x float > %x , %y
656
+ %and = select <vscale x 4 x i1 > %pg , <vscale x 4 x i1 > %cmp , <vscale x 4 x i1 > zeroinitializer
657
+ %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1 > %and , 0
658
+ %ins.2 = insertvalue %svboolx2 %ins.1 , <vscale x 4 x i1 > %cmp , 1
659
+ ret %svboolx2 %ins.2
660
+ }
661
+
662
+ define %svboolx2 @logical_and_of_multiuse_fcmp_olt_zero (<vscale x 4 x i1 > %pg , <vscale x 4 x float > %x ) {
663
+ ; CHECK-LABEL: logical_and_of_multiuse_fcmp_olt_zero:
664
+ ; CHECK: // %bb.0:
665
+ ; CHECK-NEXT: ptrue p1.s
666
+ ; CHECK-NEXT: fcmlt p1.s, p1/z, z0.s, #0.0
667
+ ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
668
+ ; CHECK-NEXT: ret
669
+ %cmp = fcmp olt <vscale x 4 x float > %x , zeroinitializer
670
+ %and = select <vscale x 4 x i1 > %pg , <vscale x 4 x i1 > %cmp , <vscale x 4 x i1 > zeroinitializer
671
+ %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1 > %and , 0
672
+ %ins.2 = insertvalue %svboolx2 %ins.1 , <vscale x 4 x i1 > %cmp , 1
673
+ ret %svboolx2 %ins.2
674
+ }
0 commit comments