xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-marith-vp.ll (revision 74f985b793bf4005e49736f8c2cef8b5cbf7c1ab)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3; RUN:   | FileCheck %s
4; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5; RUN:   | FileCheck %s
6
7declare <1 x i1> @llvm.vp.and.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32)
8
9define <1 x i1> @and_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) {
10; CHECK-LABEL: and_v1i1:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
13; CHECK-NEXT:    vmand.mm v0, v0, v8
14; CHECK-NEXT:    ret
15  %v = call <1 x i1> @llvm.vp.and.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl)
16  ret <1 x i1> %v
17}
18
19declare <2 x i1> @llvm.vp.and.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32)
20
21define <2 x i1> @and_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) {
22; CHECK-LABEL: and_v2i1:
23; CHECK:       # %bb.0:
24; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
25; CHECK-NEXT:    vmand.mm v0, v0, v8
26; CHECK-NEXT:    ret
27  %v = call <2 x i1> @llvm.vp.and.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl)
28  ret <2 x i1> %v
29}
30
31declare <4 x i1> @llvm.vp.and.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32)
32
33define <4 x i1> @and_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) {
34; CHECK-LABEL: and_v4i1:
35; CHECK:       # %bb.0:
36; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
37; CHECK-NEXT:    vmand.mm v0, v0, v8
38; CHECK-NEXT:    ret
39  %v = call <4 x i1> @llvm.vp.and.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl)
40  ret <4 x i1> %v
41}
42
43declare <8 x i1> @llvm.vp.and.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32)
44
45define <8 x i1> @and_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) {
46; CHECK-LABEL: and_v8i1:
47; CHECK:       # %bb.0:
48; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
49; CHECK-NEXT:    vmand.mm v0, v0, v8
50; CHECK-NEXT:    ret
51  %v = call <8 x i1> @llvm.vp.and.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl)
52  ret <8 x i1> %v
53}
54
55declare <16 x i1> @llvm.vp.and.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32)
56
57define <16 x i1> @and_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) {
58; CHECK-LABEL: and_v16i1:
59; CHECK:       # %bb.0:
60; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
61; CHECK-NEXT:    vmand.mm v0, v0, v8
62; CHECK-NEXT:    ret
63  %v = call <16 x i1> @llvm.vp.and.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl)
64  ret <16 x i1> %v
65}
66
67declare <1 x i1> @llvm.vp.or.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32)
68
69define <1 x i1> @or_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) {
70; CHECK-LABEL: or_v1i1:
71; CHECK:       # %bb.0:
72; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
73; CHECK-NEXT:    vmor.mm v0, v0, v8
74; CHECK-NEXT:    ret
75  %v = call <1 x i1> @llvm.vp.or.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl)
76  ret <1 x i1> %v
77}
78
79declare <2 x i1> @llvm.vp.or.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32)
80
81define <2 x i1> @or_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) {
82; CHECK-LABEL: or_v2i1:
83; CHECK:       # %bb.0:
84; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
85; CHECK-NEXT:    vmor.mm v0, v0, v8
86; CHECK-NEXT:    ret
87  %v = call <2 x i1> @llvm.vp.or.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl)
88  ret <2 x i1> %v
89}
90
91declare <4 x i1> @llvm.vp.or.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32)
92
93define <4 x i1> @or_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) {
94; CHECK-LABEL: or_v4i1:
95; CHECK:       # %bb.0:
96; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
97; CHECK-NEXT:    vmor.mm v0, v0, v8
98; CHECK-NEXT:    ret
99  %v = call <4 x i1> @llvm.vp.or.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl)
100  ret <4 x i1> %v
101}
102
103declare <8 x i1> @llvm.vp.or.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32)
104
105define <8 x i1> @or_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) {
106; CHECK-LABEL: or_v8i1:
107; CHECK:       # %bb.0:
108; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
109; CHECK-NEXT:    vmor.mm v0, v0, v8
110; CHECK-NEXT:    ret
111  %v = call <8 x i1> @llvm.vp.or.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl)
112  ret <8 x i1> %v
113}
114
115declare <16 x i1> @llvm.vp.or.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32)
116
117define <16 x i1> @or_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) {
118; CHECK-LABEL: or_v16i1:
119; CHECK:       # %bb.0:
120; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
121; CHECK-NEXT:    vmor.mm v0, v0, v8
122; CHECK-NEXT:    ret
123  %v = call <16 x i1> @llvm.vp.or.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl)
124  ret <16 x i1> %v
125}
126
127declare <1 x i1> @llvm.vp.xor.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32)
128
129define <1 x i1> @xor_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) {
130; CHECK-LABEL: xor_v1i1:
131; CHECK:       # %bb.0:
132; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
133; CHECK-NEXT:    vmxor.mm v0, v0, v8
134; CHECK-NEXT:    ret
135  %v = call <1 x i1> @llvm.vp.xor.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl)
136  ret <1 x i1> %v
137}
138
139declare <2 x i1> @llvm.vp.xor.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32)
140
141define <2 x i1> @xor_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) {
142; CHECK-LABEL: xor_v2i1:
143; CHECK:       # %bb.0:
144; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
145; CHECK-NEXT:    vmxor.mm v0, v0, v8
146; CHECK-NEXT:    ret
147  %v = call <2 x i1> @llvm.vp.xor.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl)
148  ret <2 x i1> %v
149}
150
151declare <4 x i1> @llvm.vp.xor.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32)
152
153define <4 x i1> @xor_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) {
154; CHECK-LABEL: xor_v4i1:
155; CHECK:       # %bb.0:
156; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
157; CHECK-NEXT:    vmxor.mm v0, v0, v8
158; CHECK-NEXT:    ret
159  %v = call <4 x i1> @llvm.vp.xor.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl)
160  ret <4 x i1> %v
161}
162
163declare <8 x i1> @llvm.vp.xor.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32)
164
165define <8 x i1> @xor_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) {
166; CHECK-LABEL: xor_v8i1:
167; CHECK:       # %bb.0:
168; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
169; CHECK-NEXT:    vmxor.mm v0, v0, v8
170; CHECK-NEXT:    ret
171  %v = call <8 x i1> @llvm.vp.xor.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl)
172  ret <8 x i1> %v
173}
174
175declare <16 x i1> @llvm.vp.xor.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32)
176
177define <16 x i1> @xor_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) {
178; CHECK-LABEL: xor_v16i1:
179; CHECK:       # %bb.0:
180; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
181; CHECK-NEXT:    vmxor.mm v0, v0, v8
182; CHECK-NEXT:    ret
183  %v = call <16 x i1> @llvm.vp.xor.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl)
184  ret <16 x i1> %v
185}
186