xref: /llvm-project/llvm/test/CodeGen/LoongArch/lasx/vselect.ll (revision 985d64b03accbed8500a85372d716367d89b61be)
1de21308fSwanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2de21308fSwanglei; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
3de21308fSwanglei
4de21308fSwangleidefine void @select_v32i8_imm(ptr %res, ptr %a0) nounwind {
5de21308fSwanglei; CHECK-LABEL: select_v32i8_imm:
6de21308fSwanglei; CHECK:       # %bb.0:
7de21308fSwanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
8de21308fSwanglei; CHECK-NEXT:    xvrepli.h $xr1, -256
9da5378e8Swanglei; CHECK-NEXT:    xvbitseli.b $xr1, $xr0, 1
10da5378e8Swanglei; CHECK-NEXT:    xvst $xr1, $a0, 0
11de21308fSwanglei; CHECK-NEXT:    ret
12de21308fSwanglei  %v0 = load <32 x i8>, ptr %a0
13da5378e8Swanglei  %sel = select <32 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <32 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, <32 x i8> %v0
14de21308fSwanglei  store <32 x i8> %sel, ptr %res
15de21308fSwanglei  ret void
16de21308fSwanglei}
17de21308fSwanglei
18de21308fSwangleidefine void @select_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind {
19de21308fSwanglei; CHECK-LABEL: select_v32i8:
20de21308fSwanglei; CHECK:       # %bb.0:
21de21308fSwanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
22de21308fSwanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
23de21308fSwanglei; CHECK-NEXT:    xvrepli.h $xr2, -256
24de21308fSwanglei; CHECK-NEXT:    xvbitsel.v $xr0, $xr1, $xr0, $xr2
25de21308fSwanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
26de21308fSwanglei; CHECK-NEXT:    ret
27de21308fSwanglei  %v0 = load <32 x i8>, ptr %a0
28de21308fSwanglei  %v1 = load <32 x i8>, ptr %a1
29de21308fSwanglei  %sel = select <32 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <32 x i8> %v0, <32 x i8> %v1
30de21308fSwanglei  store <32 x i8> %sel, ptr %res
31de21308fSwanglei  ret void
32de21308fSwanglei}
33de21308fSwanglei
34de21308fSwangleidefine void @select_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind {
35de21308fSwanglei; CHECK-LABEL: select_v16i16:
36de21308fSwanglei; CHECK:       # %bb.0:
37a5c90e48Swanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
38a5c90e48Swanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
39a5c90e48Swanglei; CHECK-NEXT:    lu12i.w $a1, -16
40a5c90e48Swanglei; CHECK-NEXT:    xvreplgr2vr.w $xr2, $a1
41a5c90e48Swanglei; CHECK-NEXT:    xvbitsel.v $xr0, $xr1, $xr0, $xr2
42de21308fSwanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
43de21308fSwanglei; CHECK-NEXT:    ret
44de21308fSwanglei  %v0 = load <16 x i16>, ptr %a0
45de21308fSwanglei  %v1 = load <16 x i16>, ptr %a1
46de21308fSwanglei  %sel = select <16 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <16 x i16> %v0, <16 x i16> %v1
47de21308fSwanglei  store <16 x i16> %sel, ptr %res
48de21308fSwanglei  ret void
49de21308fSwanglei}
50de21308fSwanglei
51de21308fSwangleidefine void @select_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind {
52de21308fSwanglei; CHECK-LABEL: select_v8i32:
53de21308fSwanglei; CHECK:       # %bb.0:
54de21308fSwanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
55de21308fSwanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
56de21308fSwanglei; CHECK-NEXT:    ori $a1, $zero, 0
57de21308fSwanglei; CHECK-NEXT:    lu32i.d $a1, -1
58de21308fSwanglei; CHECK-NEXT:    xvreplgr2vr.d $xr2, $a1
59de21308fSwanglei; CHECK-NEXT:    xvbitsel.v $xr0, $xr1, $xr0, $xr2
60de21308fSwanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
61de21308fSwanglei; CHECK-NEXT:    ret
62de21308fSwanglei  %v0 = load <8 x i32>, ptr %a0
63de21308fSwanglei  %v1 = load <8 x i32>, ptr %a1
64de21308fSwanglei  %sel = select <8 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <8 x i32> %v0, <8 x i32> %v1
65de21308fSwanglei  store <8 x i32> %sel, ptr %res
66de21308fSwanglei  ret void
67de21308fSwanglei}
68de21308fSwanglei
69de21308fSwangleidefine void @select_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind {
70de21308fSwanglei; CHECK-LABEL: select_v4i64:
71de21308fSwanglei; CHECK:       # %bb.0:
72a5c90e48Swanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
73a5c90e48Swanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
74a5c90e48Swanglei; CHECK-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI4_0)
75*985d64b0Shev; CHECK-NEXT:    xvld $xr2, $a1, %pc_lo12(.LCPI4_0)
76a5c90e48Swanglei; CHECK-NEXT:    xvbitsel.v $xr0, $xr1, $xr0, $xr2
77de21308fSwanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
78de21308fSwanglei; CHECK-NEXT:    ret
79de21308fSwanglei  %v0 = load <4 x i64>, ptr %a0
80de21308fSwanglei  %v1 = load <4 x i64>, ptr %a1
81de21308fSwanglei  %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i64> %v0, <4 x i64> %v1
82de21308fSwanglei  store <4 x i64> %sel, ptr %res
83de21308fSwanglei  ret void
84de21308fSwanglei}
85