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