Skip to content

Commit 9e6f2b4

Browse files
Add test to show effect of missing freeze removal.
1 parent 1b80ed4 commit 9e6f2b4

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed

llvm/test/CodeGen/AArch64/sve-fcmp.ll

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,3 +544,131 @@ define %svboolx2 @and_of_multiuse_fcmp_olt_zero(<vscale x 4 x i1> %pg, <vscale x
544544
%ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1
545545
ret %svboolx2 %ins.2
546546
}
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

Comments
 (0)