[llvm] 608b51e - [LoongArch][NFC] Pre-commit for lowering v32i8 vector mask generation to `VMSKLTZ` (#149952)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 28 02:58:08 PDT 2025
Author: hev
Date: 2025-08-28T17:58:03+08:00
New Revision: 608b51e16704656b63d761de658e206b6f285311
URL: https://github.com/llvm/llvm-project/commit/608b51e16704656b63d761de658e206b6f285311
DIFF: https://github.com/llvm/llvm-project/commit/608b51e16704656b63d761de658e206b6f285311.diff
LOG: [LoongArch][NFC] Pre-commit for lowering v32i8 vector mask generation to `VMSKLTZ` (#149952)
Added:
Modified:
llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll b/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll
index ad57bbf9ee5c0..397896c543898 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/vmskcond.ll
@@ -603,3 +603,1340 @@ define i4 @vmsk_eq_allzeros_v4i8(<4 x i8> %a) {
%2 = bitcast <4 x i1> %1 to i4
ret i4 %2
}
+
+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: 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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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: 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)
+ %2 = bitcast <32 x i1> %1 to i32
+ ret i32 %2
+}
+
+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: 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: 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
+ ret i32 %res
+}
+
+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: 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
+ %y = and <32 x i1> %x0, %x1
+ %res = bitcast <32 x i1> %y to i32
+ ret i32 %res
+}
+
+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: 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
+ ret i32 %res
+}
More information about the llvm-commits
mailing list