xref: /llvm-project/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/and.ll (revision a5c90e48b6f11bc6db7344503589648f76b16d80)
1ca66df3bSwanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2ca66df3bSwanglei; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s
3ca66df3bSwanglei
4ca66df3bSwangleidefine void @and_v16i8(ptr %res, ptr %a0, ptr %a1) nounwind {
5ca66df3bSwanglei; CHECK-LABEL: and_v16i8:
6ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
7*a5c90e48Swanglei; CHECK-NEXT:    vld $vr0, $a1, 0
8*a5c90e48Swanglei; CHECK-NEXT:    vld $vr1, $a2, 0
9*a5c90e48Swanglei; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
10ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
11ca66df3bSwanglei; CHECK-NEXT:    ret
12ca66df3bSwangleientry:
13ca66df3bSwanglei  %v0 = load <16 x i8>, ptr %a0
14ca66df3bSwanglei  %v1 = load <16 x i8>, ptr %a1
15ca66df3bSwanglei  %v2 = and <16 x i8> %v0, %v1
16ca66df3bSwanglei  store <16 x i8> %v2, ptr %res
17ca66df3bSwanglei  ret void
18ca66df3bSwanglei}
19ca66df3bSwanglei
20ca66df3bSwangleidefine void @and_v8i16(ptr %res, ptr %a0, ptr %a1) nounwind {
21ca66df3bSwanglei; CHECK-LABEL: and_v8i16:
22ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
23*a5c90e48Swanglei; CHECK-NEXT:    vld $vr0, $a1, 0
24*a5c90e48Swanglei; CHECK-NEXT:    vld $vr1, $a2, 0
25*a5c90e48Swanglei; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
26ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
27ca66df3bSwanglei; CHECK-NEXT:    ret
28ca66df3bSwangleientry:
29ca66df3bSwanglei  %v0 = load <8 x i16>, ptr %a0
30ca66df3bSwanglei  %v1 = load <8 x i16>, ptr %a1
31ca66df3bSwanglei  %v2 = and <8 x i16> %v0, %v1
32ca66df3bSwanglei  store <8 x i16> %v2, ptr %res
33ca66df3bSwanglei  ret void
34ca66df3bSwanglei}
35ca66df3bSwanglei
36ca66df3bSwangleidefine void @and_v4i32(ptr %res, ptr %a0, ptr %a1) nounwind {
37ca66df3bSwanglei; CHECK-LABEL: and_v4i32:
38ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
39*a5c90e48Swanglei; CHECK-NEXT:    vld $vr0, $a1, 0
40*a5c90e48Swanglei; CHECK-NEXT:    vld $vr1, $a2, 0
41*a5c90e48Swanglei; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
42ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
43ca66df3bSwanglei; CHECK-NEXT:    ret
44ca66df3bSwangleientry:
45ca66df3bSwanglei  %v0 = load <4 x i32>, ptr %a0
46ca66df3bSwanglei  %v1 = load <4 x i32>, ptr %a1
47ca66df3bSwanglei  %v2 = and <4 x i32> %v0, %v1
48ca66df3bSwanglei  store <4 x i32> %v2, ptr %res
49ca66df3bSwanglei  ret void
50ca66df3bSwanglei}
51ca66df3bSwanglei
52ca66df3bSwangleidefine void @and_v2i64(ptr %res, ptr %a0, ptr %a1) nounwind {
53ca66df3bSwanglei; CHECK-LABEL: and_v2i64:
54ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
55*a5c90e48Swanglei; CHECK-NEXT:    vld $vr0, $a1, 0
56*a5c90e48Swanglei; CHECK-NEXT:    vld $vr1, $a2, 0
57*a5c90e48Swanglei; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
58ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
59ca66df3bSwanglei; CHECK-NEXT:    ret
60ca66df3bSwangleientry:
61ca66df3bSwanglei  %v0 = load <2 x i64>, ptr %a0
62ca66df3bSwanglei  %v1 = load <2 x i64>, ptr %a1
63ca66df3bSwanglei  %v2 = and <2 x i64> %v0, %v1
64ca66df3bSwanglei  store <2 x i64> %v2, ptr %res
65ca66df3bSwanglei  ret void
66ca66df3bSwanglei}
67ca66df3bSwanglei
68ca66df3bSwangleidefine void @and_u_v16i8(ptr %res, ptr %a0) nounwind {
69ca66df3bSwanglei; CHECK-LABEL: and_u_v16i8:
70ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
71ca66df3bSwanglei; CHECK-NEXT:    vld $vr0, $a1, 0
72ca66df3bSwanglei; CHECK-NEXT:    vandi.b $vr0, $vr0, 31
73ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
74ca66df3bSwanglei; CHECK-NEXT:    ret
75ca66df3bSwangleientry:
76ca66df3bSwanglei  %v0 = load <16 x i8>, ptr %a0
77ca66df3bSwanglei  %v1 = and <16 x i8> %v0, <i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31>
78ca66df3bSwanglei  store <16 x i8> %v1, ptr %res
79ca66df3bSwanglei  ret void
80ca66df3bSwanglei}
81ca66df3bSwanglei
82ca66df3bSwangleidefine void @and_u_v8i16(ptr %res, ptr %a0) nounwind {
83ca66df3bSwanglei; CHECK-LABEL: and_u_v8i16:
84ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
85ca66df3bSwanglei; CHECK-NEXT:    vld $vr0, $a1, 0
86ca66df3bSwanglei; CHECK-NEXT:    vrepli.h $vr1, 31
87ca66df3bSwanglei; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
88ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
89ca66df3bSwanglei; CHECK-NEXT:    ret
90ca66df3bSwangleientry:
91ca66df3bSwanglei  %v0 = load <8 x i16>, ptr %a0
92ca66df3bSwanglei  %v1 = and <8 x i16> %v0, <i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31>
93ca66df3bSwanglei  store <8 x i16> %v1, ptr %res
94ca66df3bSwanglei  ret void
95ca66df3bSwanglei}
96ca66df3bSwanglei
97ca66df3bSwangleidefine void @and_u_v4i32(ptr %res, ptr %a0) nounwind {
98ca66df3bSwanglei; CHECK-LABEL: and_u_v4i32:
99ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
100ca66df3bSwanglei; CHECK-NEXT:    vld $vr0, $a1, 0
101ca66df3bSwanglei; CHECK-NEXT:    vrepli.w $vr1, 31
102ca66df3bSwanglei; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
103ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
104ca66df3bSwanglei; CHECK-NEXT:    ret
105ca66df3bSwangleientry:
106ca66df3bSwanglei  %v0 = load <4 x i32>, ptr %a0
107ca66df3bSwanglei  %v1 = and <4 x i32> %v0, <i32 31, i32 31, i32 31, i32 31>
108ca66df3bSwanglei  store <4 x i32> %v1, ptr %res
109ca66df3bSwanglei  ret void
110ca66df3bSwanglei}
111ca66df3bSwanglei
112ca66df3bSwangleidefine void @and_u_v2i64(ptr %res, ptr %a0) nounwind {
113ca66df3bSwanglei; CHECK-LABEL: and_u_v2i64:
114ca66df3bSwanglei; CHECK:       # %bb.0: # %entry
115ca66df3bSwanglei; CHECK-NEXT:    vld $vr0, $a1, 0
116ca66df3bSwanglei; CHECK-NEXT:    vrepli.d $vr1, 31
117ca66df3bSwanglei; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
118ca66df3bSwanglei; CHECK-NEXT:    vst $vr0, $a0, 0
119ca66df3bSwanglei; CHECK-NEXT:    ret
120ca66df3bSwangleientry:
121ca66df3bSwanglei  %v0 = load <2 x i64>, ptr %a0
122ca66df3bSwanglei  %v1 = and <2 x i64> %v0, <i64 31, i64 31>
123ca66df3bSwanglei  store <2 x i64> %v1, ptr %res
124ca66df3bSwanglei  ret void
125ca66df3bSwanglei}
126