@@ -825,3 +825,75 @@ define <vscale x 2 x i1> @select_cond_x_cond(<vscale x 2 x i1> %x, <vscale x 2 x
825
825
%a = call <vscale x 2 x i1 > @llvm.vp.select.nxv2i1 (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > %x , i32 %evl )
826
826
ret <vscale x 2 x i1 > %a
827
827
}
828
+
829
+ define <vscale x 2 x i1 > @select_undef_T_F (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , i32 zeroext %evl ) {
830
+ ; CHECK-LABEL: select_undef_T_F:
831
+ ; CHECK: # %bb.0:
832
+ ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
833
+ ; CHECK-NEXT: vmandn.mm v8, v8, v8
834
+ ; CHECK-NEXT: vmand.mm v9, v0, v8
835
+ ; CHECK-NEXT: vmor.mm v0, v9, v8
836
+ ; CHECK-NEXT: ret
837
+ %a = call <vscale x 2 x i1 > @llvm.vp.select.nxv2i1 (<vscale x 2 x i1 > poison, <vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , i32 %evl )
838
+ ret <vscale x 2 x i1 > %a
839
+ }
840
+
841
+ define <vscale x 2 x i1 > @select_undef_undef_F (<vscale x 2 x i1 > %x , i32 zeroext %evl ) {
842
+ ; CHECK-LABEL: select_undef_undef_F:
843
+ ; CHECK: # %bb.0:
844
+ ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
845
+ ; CHECK-NEXT: vmor.mm v0, v8, v0
846
+ ; CHECK-NEXT: ret
847
+ %a = call <vscale x 2 x i1 > @llvm.vp.select.nxv2i1 (<vscale x 2 x i1 > poison, <vscale x 2 x i1 > undef , <vscale x 2 x i1 > %x , i32 %evl )
848
+ ret <vscale x 2 x i1 > %a
849
+ }
850
+
851
+ define <vscale x 2 x i1 > @select_unknown_undef_F (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , i32 zeroext %evl ) {
852
+ ; CHECK-LABEL: select_unknown_undef_F:
853
+ ; CHECK: # %bb.0:
854
+ ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
855
+ ; CHECK-NEXT: vmandn.mm v8, v8, v0
856
+ ; CHECK-NEXT: vmand.mm v9, v8, v0
857
+ ; CHECK-NEXT: vmor.mm v0, v9, v8
858
+ ; CHECK-NEXT: ret
859
+ %a = call <vscale x 2 x i1 > @llvm.vp.select.nxv2i1 (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > undef , <vscale x 2 x i1 > %y , i32 %evl )
860
+ ret <vscale x 2 x i1 > %a
861
+ }
862
+
863
+ define <vscale x 2 x i1 > @select_unknown_T_undef (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , i32 zeroext %evl ) {
864
+ ; CHECK-LABEL: select_unknown_T_undef:
865
+ ; CHECK: # %bb.0:
866
+ ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
867
+ ; CHECK-NEXT: vmandn.mm v9, v8, v0
868
+ ; CHECK-NEXT: vmand.mm v8, v8, v0
869
+ ; CHECK-NEXT: vmor.mm v0, v8, v9
870
+ ; CHECK-NEXT: ret
871
+ %a = call <vscale x 2 x i1 > @llvm.vp.select.nxv2i1 (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > poison, i32 %evl )
872
+ ret <vscale x 2 x i1 > %a
873
+ }
874
+
875
+ define <vscale x 2 x i1 > @select_false_T_F (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > %z , i32 zeroext %evl ) {
876
+ ; CHECK-LABEL: select_false_T_F:
877
+ ; CHECK: # %bb.0:
878
+ ; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
879
+ ; CHECK-NEXT: vmclr.m v10
880
+ ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
881
+ ; CHECK-NEXT: vmandn.mm v9, v9, v10
882
+ ; CHECK-NEXT: vmand.mm v8, v8, v10
883
+ ; CHECK-NEXT: vmor.mm v0, v8, v9
884
+ ; CHECK-NEXT: ret
885
+ %a = call <vscale x 2 x i1 > @llvm.vp.select.nxv2i1 (<vscale x 2 x i1 > zeroinitializer , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > %z , i32 %evl )
886
+ ret <vscale x 2 x i1 > %a
887
+ }
888
+
889
+ define <vscale x 2 x i1 > @select_unknown_T_T (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , i32 zeroext %evl ) {
890
+ ; CHECK-LABEL: select_unknown_T_T:
891
+ ; CHECK: # %bb.0:
892
+ ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
893
+ ; CHECK-NEXT: vmandn.mm v9, v8, v0
894
+ ; CHECK-NEXT: vmand.mm v8, v8, v0
895
+ ; CHECK-NEXT: vmor.mm v0, v8, v9
896
+ ; CHECK-NEXT: ret
897
+ %a = call <vscale x 2 x i1 > @llvm.vp.select.nxv2i1 (<vscale x 2 x i1 > %x , <vscale x 2 x i1 > %y , <vscale x 2 x i1 > %y , i32 %evl )
898
+ ret <vscale x 2 x i1 > %a
899
+ }
0 commit comments