diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp index 664abffc6bff7..ffb6c2980026f 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp @@ -4794,13 +4794,29 @@ static SDValue performBITCASTCombine(SDNode *N, SelectionDAG &DAG, UseLASX = true; break; }; - if (UseLASX && !(Subtarget.has32S() && Subtarget.hasExtLASX())) - return SDValue(); Src = PropagateSExt ? signExtendBitcastSrcVector(DAG, SExtVT, Src, DL) : DAG.getNode(ISD::SIGN_EXTEND, DL, SExtVT, Src); - Opc = UseLASX ? LoongArchISD::XVMSKLTZ : LoongArchISD::VMSKLTZ; - SDValue V = DAG.getNode(Opc, DL, MVT::i64, Src); + SDValue V; + if (!Subtarget.has32S() || !Subtarget.hasExtLASX()) { + if (Src.getSimpleValueType() == MVT::v32i8) { + SDValue Lo, Hi; + std::tie(Lo, Hi) = DAG.SplitVector(Src, DL); + Lo = DAG.getNode(LoongArchISD::VMSKLTZ, DL, MVT::i64, Lo); + Hi = DAG.getNode(LoongArchISD::VMSKLTZ, DL, MVT::i64, Hi); + Hi = DAG.getNode(ISD::SHL, DL, MVT::i64, Hi, + DAG.getConstant(16, DL, MVT::i8)); + V = DAG.getNode(ISD::OR, DL, MVT::i64, Lo, Hi); + } else if (UseLASX) { + return SDValue(); + } + } + + if (!V) { + Opc = UseLASX ? LoongArchISD::XVMSKLTZ : LoongArchISD::VMSKLTZ; + V = DAG.getNode(Opc, DL, MVT::i64, Src); + } + EVT T = EVT::getIntegerVT(*DAG.getContext(), SrcVT.getVectorNumElements()); V = DAG.getZExtOrTrunc(V, DL, T); return DAG.getBitcast(VT, V); diff --git a/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll b/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll index 397896c543898..7fa591db5d1fa 100644 --- a/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll +++ b/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll @@ -607,117 +607,14 @@ define i4 @vmsk_eq_allzeros_v4i8(<4 x i8> %a) { define i32 @vmsk2_eq_allzeros_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_eq_allzeros_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vseqi.b $vr0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vseqi.b $vr0, $vr1, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp eq <32 x i8> %a, splat (i8 0) @@ -728,118 +625,15 @@ entry: define i32 @vmsk2_sgt_allzeros_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_sgt_allzeros_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vrepli.b $vr2, 0 ; CHECK-NEXT: vslt.b $vr0, $vr2, $vr0 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vslt.b $vr0, $vr2, $vr1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp sgt <32 x i8> %a, splat (i8 0) @@ -850,118 +644,15 @@ entry: define i32 @vmsk2_sgt_allones_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_sgt_allones_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vrepli.b $vr2, -1 ; CHECK-NEXT: vslt.b $vr0, $vr2, $vr0 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vslt.b $vr0, $vr2, $vr1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp sgt <32 x i8> %a, splat (i8 -1) @@ -972,118 +663,15 @@ entry: define i32 @vmsk2_sge_allzeros_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_sge_allzeros_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vrepli.b $vr2, 0 ; CHECK-NEXT: vsle.b $vr0, $vr2, $vr0 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vsle.b $vr0, $vr2, $vr1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp sge <32 x i8> %a, splat (i8 0) @@ -1094,117 +682,12 @@ entry: define i32 @vmsk2_slt_allzeros_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_slt_allzeros_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: vslti.b $vr0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 -; CHECK-NEXT: vslti.b $vr0, $vr1, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr1 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp slt <32 x i8> %a, splat (i8 0) @@ -1215,117 +698,14 @@ entry: define i32 @vmsk2_sle_allzeros_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_sle_allzeros_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vslei.b $vr0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vslei.b $vr0, $vr1, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp sle <32 x i8> %a, splat (i8 0) @@ -1336,117 +716,14 @@ entry: define i32 @vmsk2_sle_allones_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_sle_allones_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vslei.b $vr0, $vr0, -1 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vslei.b $vr0, $vr1, -1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp sle <32 x i8> %a, splat (i8 -1) @@ -1457,119 +734,16 @@ entry: define i32 @vmsk2_ne_allzeros_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_ne_allzeros_i8: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vseqi.b $vr0, $vr0, 0 ; CHECK-NEXT: vxori.b $vr0, $vr0, 255 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vseqi.b $vr0, $vr1, 0 ; CHECK-NEXT: vxori.b $vr0, $vr0, 255 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret entry: %1 = icmp ne <32 x i8> %a, splat (i8 0) @@ -1580,117 +754,14 @@ entry: define i32 @vmsk2_sgt_v32i8(<32 x i8> %a, <32 x i8> %b) { ; CHECK-LABEL: vmsk2_sgt_v32i8: ; CHECK: # %bb.0: -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: vslt.b $vr0, $vr2, $vr0 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 ; CHECK-NEXT: vslt.b $vr0, $vr3, $vr1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret %x = icmp sgt <32 x i8> %a, %b %res = bitcast <32 x i1> %x to i32 @@ -1700,121 +771,18 @@ define i32 @vmsk2_sgt_v32i8(<32 x i8> %a, <32 x i8> %b) { define i32 @vmsk2_sgt_and_sgt_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i8> %d) { ; CHECK-LABEL: vmsk2_sgt_and_sgt_v32i8: ; CHECK: # %bb.0: -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: vslt.b $vr1, $vr3, $vr1 ; CHECK-NEXT: vslt.b $vr0, $vr2, $vr0 -; CHECK-NEXT: vslt.b $vr2, $vr7, $vr5 -; CHECK-NEXT: vslt.b $vr3, $vr6, $vr4 -; CHECK-NEXT: vand.v $vr0, $vr0, $vr3 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 -; CHECK-NEXT: vand.v $vr0, $vr1, $vr2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr0, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vslt.b $vr1, $vr3, $vr1 +; CHECK-NEXT: vslt.b $vr2, $vr6, $vr4 +; CHECK-NEXT: vslt.b $vr3, $vr7, $vr5 +; CHECK-NEXT: vand.v $vr1, $vr1, $vr3 +; CHECK-NEXT: vand.v $vr0, $vr0, $vr2 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 +; CHECK-NEXT: vmskltz.b $vr0, $vr1 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret %x0 = icmp sgt <32 x i8> %a, %b %x1 = icmp sgt <32 x i8> %c, %d @@ -1826,115 +794,14 @@ define i32 @vmsk2_sgt_and_sgt_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <3 define i32 @vmsk2_trunc_i8(<32 x i8> %a) { ; CHECK-LABEL: vmsk2_trunc_i8: ; CHECK: # %bb.0: -; CHECK-NEXT: addi.d $sp, $sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 1 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: bstrins.d $a0, $a1, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 2 -; CHECK-NEXT: bstrins.d $a0, $a1, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 3 -; CHECK-NEXT: bstrins.d $a0, $a1, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 4 -; CHECK-NEXT: bstrins.d $a0, $a1, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 5 -; CHECK-NEXT: bstrins.d $a0, $a1, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 6 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 6 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 7 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 7 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 8 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 8 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 9 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 9 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 10 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 10 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 11 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 11 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 12 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 12 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 13 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 13 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 14 -; CHECK-NEXT: andi $a1, $a1, 1 -; CHECK-NEXT: slli.d $a1, $a1, 14 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: vpickve2gr.b $a1, $vr0, 15 -; CHECK-NEXT: slli.d $a1, $a1, 15 -; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: bstrpick.d $a0, $a0, 15, 0 -; CHECK-NEXT: vpickve2gr.b $a1, $vr1, 0 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 1 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: bstrins.d $a1, $a2, 63, 1 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 2 -; CHECK-NEXT: bstrins.d $a1, $a2, 2, 2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 3 -; CHECK-NEXT: bstrins.d $a1, $a2, 3, 3 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 4 -; CHECK-NEXT: bstrins.d $a1, $a2, 4, 4 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 5 -; CHECK-NEXT: bstrins.d $a1, $a2, 5, 5 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 6 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 6 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 7 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 7 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 8 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 8 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 9 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 9 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 10 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 10 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 11 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 11 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 12 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 12 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 13 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 13 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 14 -; CHECK-NEXT: andi $a2, $a2, 1 -; CHECK-NEXT: slli.d $a2, $a2, 14 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 15 -; CHECK-NEXT: slli.d $a2, $a2, 15 -; CHECK-NEXT: or $a1, $a1, $a2 -; CHECK-NEXT: bstrpick.d $a1, $a1, 15, 0 +; CHECK-NEXT: vslli.b $vr0, $vr0, 7 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0 +; CHECK-NEXT: vslli.b $vr0, $vr1, 7 +; CHECK-NEXT: vmskltz.b $vr0, $vr0 +; CHECK-NEXT: vpickve2gr.hu $a1, $vr0, 0 ; CHECK-NEXT: slli.d $a1, $a1, 16 ; CHECK-NEXT: or $a0, $a0, $a1 -; CHECK-NEXT: addi.d $sp, $sp, 16 ; CHECK-NEXT: ret %y = trunc <32 x i8> %a to <32 x i1> %res = bitcast <32 x i1> %y to i32