Skip to content

Commit b0050f2

Browse files
committed
[VP][DAGCombine] Use simplifySelect when combining vp.select.
1 parent 5d636a2 commit b0050f2

File tree

2 files changed

+12
-24
lines changed

2 files changed

+12
-24
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12056,6 +12056,13 @@ SDValue DAGCombiner::foldVSelectOfConstants(SDNode *N) {
1205612056
}
1205712057

1205812058
SDValue DAGCombiner::visitVP_SELECT(SDNode *N) {
12059+
SDValue N0 = N->getOperand(0);
12060+
SDValue N1 = N->getOperand(1);
12061+
SDValue N2 = N->getOperand(2);
12062+
12063+
if (SDValue V = DAG.simplifySelect(N0, N1, N2))
12064+
return V;
12065+
1205912066
if (SDValue V = foldBoolSelectToLogic<VPMatchContext>(N, DAG))
1206012067
return V;
1206112068

llvm/test/CodeGen/RISCV/rvv/vselect-vp.ll

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -829,10 +829,7 @@ define <vscale x 2 x i1> @select_cond_x_cond(<vscale x 2 x i1> %x, <vscale x 2 x
829829
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) {
830830
; CHECK-LABEL: select_undef_T_F:
831831
; 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
832+
; CHECK-NEXT: vmv1r.v v0, v8
836833
; CHECK-NEXT: ret
837834
%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)
838835
ret <vscale x 2 x i1> %a
@@ -841,8 +838,6 @@ define <vscale x 2 x i1> @select_undef_T_F(<vscale x 2 x i1> %x, <vscale x 2 x i
841838
define <vscale x 2 x i1> @select_undef_undef_F(<vscale x 2 x i1> %x, i32 zeroext %evl) {
842839
; CHECK-LABEL: select_undef_undef_F:
843840
; CHECK: # %bb.0:
844-
; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
845-
; CHECK-NEXT: vmor.mm v0, v8, v0
846841
; CHECK-NEXT: ret
847842
%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)
848843
ret <vscale x 2 x i1> %a
@@ -851,10 +846,7 @@ define <vscale x 2 x i1> @select_undef_undef_F(<vscale x 2 x i1> %x, i32 zeroext
851846
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) {
852847
; CHECK-LABEL: select_unknown_undef_F:
853848
; 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
849+
; CHECK-NEXT: vmv1r.v v0, v8
858850
; CHECK-NEXT: ret
859851
%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)
860852
ret <vscale x 2 x i1> %a
@@ -863,10 +855,7 @@ define <vscale x 2 x i1> @select_unknown_undef_F(<vscale x 2 x i1> %x, <vscale x
863855
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) {
864856
; CHECK-LABEL: select_unknown_T_undef:
865857
; 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
858+
; CHECK-NEXT: vmv1r.v v0, v8
870859
; CHECK-NEXT: ret
871860
%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)
872861
ret <vscale x 2 x i1> %a
@@ -875,12 +864,7 @@ define <vscale x 2 x i1> @select_unknown_T_undef(<vscale x 2 x i1> %x, <vscale x
875864
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) {
876865
; CHECK-LABEL: select_false_T_F:
877866
; 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
867+
; CHECK-NEXT: vmv1r.v v0, v9
884868
; CHECK-NEXT: ret
885869
%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)
886870
ret <vscale x 2 x i1> %a
@@ -889,10 +873,7 @@ define <vscale x 2 x i1> @select_false_T_F(<vscale x 2 x i1> %x, <vscale x 2 x i
889873
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) {
890874
; CHECK-LABEL: select_unknown_T_T:
891875
; 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
876+
; CHECK-NEXT: vmv1r.v v0, v8
896877
; CHECK-NEXT: ret
897878
%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)
898879
ret <vscale x 2 x i1> %a

0 commit comments

Comments
 (0)