xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/insertelt-i1.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
4
5define <vscale x 1 x i1> @insertelt_nxv1i1(<vscale x 1 x i1> %x, i1 %elt) {
6; CHECK-LABEL: insertelt_nxv1i1:
7; CHECK:       # %bb.0:
8; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
9; CHECK-NEXT:    vmv.v.i v8, 0
10; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
11; CHECK-NEXT:    vmv.s.x v9, a0
12; CHECK-NEXT:    vsetivli zero, 3, e8, mf8, tu, ma
13; CHECK-NEXT:    vslideup.vi v8, v9, 2
14; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
15; CHECK-NEXT:    vand.vi v8, v8, 1
16; CHECK-NEXT:    vmsne.vi v0, v8, 0
17; CHECK-NEXT:    ret
18  %y = insertelement <vscale x 1 x i1> %x, i1 %elt, i64 2
19  ret <vscale x 1 x i1> %y
20}
21
22define <vscale x 1 x i1> @insertelt_idx_nxv1i1(<vscale x 1 x i1> %x, i1 %elt, i64 %idx) {
23; CHECK-LABEL: insertelt_idx_nxv1i1:
24; CHECK:       # %bb.0:
25; CHECK-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
26; CHECK-NEXT:    vmv.v.i v8, 0
27; CHECK-NEXT:    addi a2, a1, 1
28; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
29; CHECK-NEXT:    vmv.s.x v9, a0
30; CHECK-NEXT:    vsetvli zero, a2, e8, mf8, tu, ma
31; CHECK-NEXT:    vslideup.vx v8, v9, a1
32; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
33; CHECK-NEXT:    vand.vi v8, v8, 1
34; CHECK-NEXT:    vmsne.vi v0, v8, 0
35; CHECK-NEXT:    ret
36  %y = insertelement <vscale x 1 x i1> %x, i1 %elt, i64 %idx
37  ret <vscale x 1 x i1> %y
38}
39
40define <vscale x 2 x i1> @insertelt_nxv2i1(<vscale x 2 x i1> %x, i1 %elt) {
41; CHECK-LABEL: insertelt_nxv2i1:
42; CHECK:       # %bb.0:
43; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
44; CHECK-NEXT:    vmv.v.i v8, 0
45; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
46; CHECK-NEXT:    vmv.s.x v9, a0
47; CHECK-NEXT:    vsetivli zero, 3, e8, mf4, tu, ma
48; CHECK-NEXT:    vslideup.vi v8, v9, 2
49; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
50; CHECK-NEXT:    vand.vi v8, v8, 1
51; CHECK-NEXT:    vmsne.vi v0, v8, 0
52; CHECK-NEXT:    ret
53  %y = insertelement <vscale x 2 x i1> %x, i1 %elt, i64 2
54  ret <vscale x 2 x i1> %y
55}
56
57define <vscale x 2 x i1> @insertelt_idx_nxv2i1(<vscale x 2 x i1> %x, i1 %elt, i64 %idx) {
58; CHECK-LABEL: insertelt_idx_nxv2i1:
59; CHECK:       # %bb.0:
60; CHECK-NEXT:    vsetvli a2, zero, e8, mf4, ta, ma
61; CHECK-NEXT:    vmv.v.i v8, 0
62; CHECK-NEXT:    addi a2, a1, 1
63; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
64; CHECK-NEXT:    vmv.s.x v9, a0
65; CHECK-NEXT:    vsetvli zero, a2, e8, mf4, tu, ma
66; CHECK-NEXT:    vslideup.vx v8, v9, a1
67; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
68; CHECK-NEXT:    vand.vi v8, v8, 1
69; CHECK-NEXT:    vmsne.vi v0, v8, 0
70; CHECK-NEXT:    ret
71  %y = insertelement <vscale x 2 x i1> %x, i1 %elt, i64 %idx
72  ret <vscale x 2 x i1> %y
73}
74
75define <vscale x 4 x i1> @insertelt_nxv4i1(<vscale x 4 x i1> %x, i1 %elt) {
76; CHECK-LABEL: insertelt_nxv4i1:
77; CHECK:       # %bb.0:
78; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
79; CHECK-NEXT:    vmv.v.i v8, 0
80; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
81; CHECK-NEXT:    vmv.s.x v9, a0
82; CHECK-NEXT:    vsetivli zero, 3, e8, mf2, tu, ma
83; CHECK-NEXT:    vslideup.vi v8, v9, 2
84; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
85; CHECK-NEXT:    vand.vi v8, v8, 1
86; CHECK-NEXT:    vmsne.vi v0, v8, 0
87; CHECK-NEXT:    ret
88  %y = insertelement <vscale x 4 x i1> %x, i1 %elt, i64 2
89  ret <vscale x 4 x i1> %y
90}
91
92define <vscale x 4 x i1> @insertelt_idx_nxv4i1(<vscale x 4 x i1> %x, i1 %elt, i64 %idx) {
93; CHECK-LABEL: insertelt_idx_nxv4i1:
94; CHECK:       # %bb.0:
95; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
96; CHECK-NEXT:    vmv.v.i v8, 0
97; CHECK-NEXT:    addi a2, a1, 1
98; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
99; CHECK-NEXT:    vmv.s.x v9, a0
100; CHECK-NEXT:    vsetvli zero, a2, e8, mf2, tu, ma
101; CHECK-NEXT:    vslideup.vx v8, v9, a1
102; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
103; CHECK-NEXT:    vand.vi v8, v8, 1
104; CHECK-NEXT:    vmsne.vi v0, v8, 0
105; CHECK-NEXT:    ret
106  %y = insertelement <vscale x 4 x i1> %x, i1 %elt, i64 %idx
107  ret <vscale x 4 x i1> %y
108}
109
110define <vscale x 8 x i1> @insertelt_nxv8i1(<vscale x 8 x i1> %x, i1 %elt) {
111; CHECK-LABEL: insertelt_nxv8i1:
112; CHECK:       # %bb.0:
113; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
114; CHECK-NEXT:    vmv.v.i v8, 0
115; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
116; CHECK-NEXT:    vmv.s.x v9, a0
117; CHECK-NEXT:    vsetivli zero, 3, e8, m1, tu, ma
118; CHECK-NEXT:    vslideup.vi v8, v9, 2
119; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
120; CHECK-NEXT:    vand.vi v8, v8, 1
121; CHECK-NEXT:    vmsne.vi v0, v8, 0
122; CHECK-NEXT:    ret
123  %y = insertelement <vscale x 8 x i1> %x, i1 %elt, i64 2
124  ret <vscale x 8 x i1> %y
125}
126
127define <vscale x 8 x i1> @insertelt_idx_nxv8i1(<vscale x 8 x i1> %x, i1 %elt, i64 %idx) {
128; CHECK-LABEL: insertelt_idx_nxv8i1:
129; CHECK:       # %bb.0:
130; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
131; CHECK-NEXT:    vmv.v.i v8, 0
132; CHECK-NEXT:    addi a2, a1, 1
133; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
134; CHECK-NEXT:    vmv.s.x v9, a0
135; CHECK-NEXT:    vsetvli zero, a2, e8, m1, tu, ma
136; CHECK-NEXT:    vslideup.vx v8, v9, a1
137; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
138; CHECK-NEXT:    vand.vi v8, v8, 1
139; CHECK-NEXT:    vmsne.vi v0, v8, 0
140; CHECK-NEXT:    ret
141  %y = insertelement <vscale x 8 x i1> %x, i1 %elt, i64 %idx
142  ret <vscale x 8 x i1> %y
143}
144
145define <vscale x 16 x i1> @insertelt_nxv16i1(<vscale x 16 x i1> %x, i1 %elt) {
146; CHECK-LABEL: insertelt_nxv16i1:
147; CHECK:       # %bb.0:
148; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
149; CHECK-NEXT:    vmv.v.i v8, 0
150; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
151; CHECK-NEXT:    vmv.s.x v10, a0
152; CHECK-NEXT:    vsetivli zero, 3, e8, m1, tu, ma
153; CHECK-NEXT:    vslideup.vi v8, v10, 2
154; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
155; CHECK-NEXT:    vand.vi v8, v8, 1
156; CHECK-NEXT:    vmsne.vi v0, v8, 0
157; CHECK-NEXT:    ret
158  %y = insertelement <vscale x 16 x i1> %x, i1 %elt, i64 2
159  ret <vscale x 16 x i1> %y
160}
161
162define <vscale x 16 x i1> @insertelt_idx_nxv16i1(<vscale x 16 x i1> %x, i1 %elt, i64 %idx) {
163; CHECK-LABEL: insertelt_idx_nxv16i1:
164; CHECK:       # %bb.0:
165; CHECK-NEXT:    vsetvli a2, zero, e8, m2, ta, ma
166; CHECK-NEXT:    vmv.v.i v8, 0
167; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
168; CHECK-NEXT:    vmv.s.x v10, a0
169; CHECK-NEXT:    addi a0, a1, 1
170; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, ma
171; CHECK-NEXT:    vslideup.vx v8, v10, a1
172; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
173; CHECK-NEXT:    vand.vi v8, v8, 1
174; CHECK-NEXT:    vmsne.vi v0, v8, 0
175; CHECK-NEXT:    ret
176  %y = insertelement <vscale x 16 x i1> %x, i1 %elt, i64 %idx
177  ret <vscale x 16 x i1> %y
178}
179
180define <vscale x 32 x i1> @insertelt_nxv32i1(<vscale x 32 x i1> %x, i1 %elt) {
181; CHECK-LABEL: insertelt_nxv32i1:
182; CHECK:       # %bb.0:
183; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
184; CHECK-NEXT:    vmv.v.i v8, 0
185; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
186; CHECK-NEXT:    vmv.s.x v12, a0
187; CHECK-NEXT:    vsetivli zero, 3, e8, m1, tu, ma
188; CHECK-NEXT:    vslideup.vi v8, v12, 2
189; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
190; CHECK-NEXT:    vand.vi v8, v8, 1
191; CHECK-NEXT:    vmsne.vi v0, v8, 0
192; CHECK-NEXT:    ret
193  %y = insertelement <vscale x 32 x i1> %x, i1 %elt, i64 2
194  ret <vscale x 32 x i1> %y
195}
196
197define <vscale x 32 x i1> @insertelt_idx_nxv32i1(<vscale x 32 x i1> %x, i1 %elt, i64 %idx) {
198; CHECK-LABEL: insertelt_idx_nxv32i1:
199; CHECK:       # %bb.0:
200; CHECK-NEXT:    vsetvli a2, zero, e8, m4, ta, ma
201; CHECK-NEXT:    vmv.v.i v8, 0
202; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
203; CHECK-NEXT:    vmv.s.x v12, a0
204; CHECK-NEXT:    addi a0, a1, 1
205; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, ma
206; CHECK-NEXT:    vslideup.vx v8, v12, a1
207; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
208; CHECK-NEXT:    vand.vi v8, v8, 1
209; CHECK-NEXT:    vmsne.vi v0, v8, 0
210; CHECK-NEXT:    ret
211  %y = insertelement <vscale x 32 x i1> %x, i1 %elt, i64 %idx
212  ret <vscale x 32 x i1> %y
213}
214
215define <vscale x 64 x i1> @insertelt_nxv64i1(<vscale x 64 x i1> %x, i1 %elt) {
216; CHECK-LABEL: insertelt_nxv64i1:
217; CHECK:       # %bb.0:
218; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
219; CHECK-NEXT:    vmv.v.i v8, 0
220; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
221; CHECK-NEXT:    vmv.s.x v16, a0
222; CHECK-NEXT:    vsetivli zero, 3, e8, m1, tu, ma
223; CHECK-NEXT:    vslideup.vi v8, v16, 2
224; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
225; CHECK-NEXT:    vand.vi v8, v8, 1
226; CHECK-NEXT:    vmsne.vi v0, v8, 0
227; CHECK-NEXT:    ret
228  %y = insertelement <vscale x 64 x i1> %x, i1 %elt, i64 2
229  ret <vscale x 64 x i1> %y
230}
231
232define <vscale x 64 x i1> @insertelt_idx_nxv64i1(<vscale x 64 x i1> %x, i1 %elt, i64 %idx) {
233; CHECK-LABEL: insertelt_idx_nxv64i1:
234; CHECK:       # %bb.0:
235; CHECK-NEXT:    vsetvli a2, zero, e8, m8, ta, ma
236; CHECK-NEXT:    vmv.v.i v8, 0
237; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
238; CHECK-NEXT:    vmv.s.x v16, a0
239; CHECK-NEXT:    addi a0, a1, 1
240; CHECK-NEXT:    vsetvli zero, a0, e8, m8, tu, ma
241; CHECK-NEXT:    vslideup.vx v8, v16, a1
242; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
243; CHECK-NEXT:    vand.vi v8, v8, 1
244; CHECK-NEXT:    vmsne.vi v0, v8, 0
245; CHECK-NEXT:    ret
246  %y = insertelement <vscale x 64 x i1> %x, i1 %elt, i64 %idx
247  ret <vscale x 64 x i1> %y
248}
249