xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/compressstore.ll (revision b6c0f1bfa79a3a32d841ac5ab1f94c3aee3b5d90)
1aa68e281SKolya Panchenko; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2aa68e281SKolya Panchenko; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+v,+d,+m,+zbb %s -o - | FileCheck %s --check-prefix=RV64
3aa68e281SKolya Panchenko; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+v,+d,+m,+zbb %s -o - | FileCheck %s --check-prefix=RV32
4aa68e281SKolya Panchenko
5aa68e281SKolya Panchenko; Compress + store for i8 type
6aa68e281SKolya Panchenko
7aa68e281SKolya Panchenkodefine void @test_compresstore_v1i8(ptr %p, <1 x i1> %mask, <1 x i8> %data) {
8aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v1i8:
9aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
10aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
11aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
12aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
13aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
14aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v9, (a0)
15aa68e281SKolya Panchenko; RV64-NEXT:    ret
16aa68e281SKolya Panchenko;
17aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v1i8:
18aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
19aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
20aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
21aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
22aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
23aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v9, (a0)
24aa68e281SKolya Panchenko; RV32-NEXT:    ret
25aa68e281SKolya Panchenkoentry:
26aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v1i8(<1 x i8> %data, ptr align 1 %p, <1 x i1> %mask)
27aa68e281SKolya Panchenko  ret void
28aa68e281SKolya Panchenko}
29aa68e281SKolya Panchenko
30aa68e281SKolya Panchenkodefine void @test_compresstore_v2i8(ptr %p, <2 x i1> %mask, <2 x i8> %data) {
31aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v2i8:
32aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
33aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
34aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
35aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
36aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
37aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v9, (a0)
38aa68e281SKolya Panchenko; RV64-NEXT:    ret
39aa68e281SKolya Panchenko;
40aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v2i8:
41aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
42aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
43aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
44aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
45aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
46aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v9, (a0)
47aa68e281SKolya Panchenko; RV32-NEXT:    ret
48aa68e281SKolya Panchenkoentry:
49aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v2i8(<2 x i8> %data, ptr align 1 %p, <2 x i1> %mask)
50aa68e281SKolya Panchenko  ret void
51aa68e281SKolya Panchenko}
52aa68e281SKolya Panchenko
53aa68e281SKolya Panchenkodefine void @test_compresstore_v4i8(ptr %p, <4 x i1> %mask, <4 x i8> %data) {
54aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v4i8:
55aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
56aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
57aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
58aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
59aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
60aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v9, (a0)
61aa68e281SKolya Panchenko; RV64-NEXT:    ret
62aa68e281SKolya Panchenko;
63aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v4i8:
64aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
65aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
66aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
67aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
68aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
69aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v9, (a0)
70aa68e281SKolya Panchenko; RV32-NEXT:    ret
71aa68e281SKolya Panchenkoentry:
72aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v4i8(<4 x i8> %data, ptr align 1 %p, <4 x i1> %mask)
73aa68e281SKolya Panchenko  ret void
74aa68e281SKolya Panchenko}
75aa68e281SKolya Panchenko
76aa68e281SKolya Panchenkodefine void @test_compresstore_v8i8(ptr %p, <8 x i1> %mask, <8 x i8> %data) {
77aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v8i8:
78aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
79aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
80aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
81aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
82aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
83aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v9, (a0)
84aa68e281SKolya Panchenko; RV64-NEXT:    ret
85aa68e281SKolya Panchenko;
86aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v8i8:
87aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
88aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
89aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
90aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
91aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
92aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v9, (a0)
93aa68e281SKolya Panchenko; RV32-NEXT:    ret
94aa68e281SKolya Panchenkoentry:
95aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v8i8(<8 x i8> %data, ptr align 1 %p, <8 x i1> %mask)
96aa68e281SKolya Panchenko  ret void
97aa68e281SKolya Panchenko}
98aa68e281SKolya Panchenko
99aa68e281SKolya Panchenkodefine void @test_compresstore_v16i8(ptr %p, <16 x i1> %mask, <16 x i8> %data) {
100aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v16i8:
101aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
102aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
103aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
104aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
105aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
106aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v9, (a0)
107aa68e281SKolya Panchenko; RV64-NEXT:    ret
108aa68e281SKolya Panchenko;
109aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v16i8:
110aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
111aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
112aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
113aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
114aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
115aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v9, (a0)
116aa68e281SKolya Panchenko; RV32-NEXT:    ret
117aa68e281SKolya Panchenkoentry:
118aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v16i8(<16 x i8> %data, ptr align 1 %p, <16 x i1> %mask)
119aa68e281SKolya Panchenko  ret void
120aa68e281SKolya Panchenko}
121aa68e281SKolya Panchenko
122aa68e281SKolya Panchenkodefine void @test_compresstore_v32i8(ptr %p, <32 x i1> %mask, <32 x i8> %data) {
123aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v32i8:
124aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
125aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 32
126aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
127aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v10, v8, v0
128aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
129aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
130aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v10, (a0)
131aa68e281SKolya Panchenko; RV64-NEXT:    ret
132aa68e281SKolya Panchenko;
133aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v32i8:
134aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
135aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 32
136aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
137aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v10, v8, v0
138aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
139aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
140aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v10, (a0)
141aa68e281SKolya Panchenko; RV32-NEXT:    ret
142aa68e281SKolya Panchenkoentry:
143aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v32i8(<32 x i8> %data, ptr align 1 %p, <32 x i1> %mask)
144aa68e281SKolya Panchenko  ret void
145aa68e281SKolya Panchenko}
146aa68e281SKolya Panchenko
147aa68e281SKolya Panchenkodefine void @test_compresstore_v64i8(ptr %p, <64 x i1> %mask, <64 x i8> %data) {
148aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v64i8:
149aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
150aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 64
151aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
152aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v12, v8, v0
153aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
154aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
155aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v12, (a0)
156aa68e281SKolya Panchenko; RV64-NEXT:    ret
157aa68e281SKolya Panchenko;
158aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v64i8:
159aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
160aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 64
161aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
162aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v12, v8, v0
163aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
164aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
165aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v12, (a0)
166aa68e281SKolya Panchenko; RV32-NEXT:    ret
167aa68e281SKolya Panchenkoentry:
168aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v64i8(<64 x i8> %data, ptr align 1 %p, <64 x i1> %mask)
169aa68e281SKolya Panchenko  ret void
170aa68e281SKolya Panchenko}
171aa68e281SKolya Panchenko
172aa68e281SKolya Panchenkodefine void @test_compresstore_v128i8(ptr %p, <128 x i1> %mask, <128 x i8> %data) {
173aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v128i8:
174aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
175aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 128
176aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
177aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v16, v8, v0
178aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
179aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
180aa68e281SKolya Panchenko; RV64-NEXT:    vse8.v v16, (a0)
181aa68e281SKolya Panchenko; RV64-NEXT:    ret
182aa68e281SKolya Panchenko;
183aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v128i8:
184aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
185aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 128
186aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
187aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v16, v8, v0
188aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
189aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
190aa68e281SKolya Panchenko; RV32-NEXT:    vse8.v v16, (a0)
191aa68e281SKolya Panchenko; RV32-NEXT:    ret
192aa68e281SKolya Panchenkoentry:
193aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v128i8(<128 x i8> %data, ptr align 1 %p, <128 x i1> %mask)
194aa68e281SKolya Panchenko  ret void
195aa68e281SKolya Panchenko}
196aa68e281SKolya Panchenko
197aa68e281SKolya Panchenkodefine void @test_compresstore_v256i8(ptr %p, <256 x i1> %mask, <256 x i8> %data) {
198aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v256i8:
199aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
200*b6c0f1bfSLuke Lau; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2019122c523SPengcheng Wang; RV64-NEXT:    vmv1r.v v7, v8
202aa68e281SKolya Panchenko; RV64-NEXT:    li a2, 128
203aa68e281SKolya Panchenko; RV64-NEXT:    vslidedown.vi v9, v0, 1
204aa68e281SKolya Panchenko; RV64-NEXT:    vmv.x.s a3, v0
205aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
2069122c523SPengcheng Wang; RV64-NEXT:    vle8.v v24, (a1)
2079122c523SPengcheng Wang; RV64-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
2089122c523SPengcheng Wang; RV64-NEXT:    vmv.x.s a1, v9
2099122c523SPengcheng Wang; RV64-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
2109122c523SPengcheng Wang; RV64-NEXT:    vcompress.vm v8, v16, v0
211aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a4, v0
212aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a4, e8, m8, ta, ma
2139122c523SPengcheng Wang; RV64-NEXT:    vse8.v v8, (a0)
214aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
2159122c523SPengcheng Wang; RV64-NEXT:    vcpop.m a2, v7
216aa68e281SKolya Panchenko; RV64-NEXT:    cpop a3, a3
217aa68e281SKolya Panchenko; RV64-NEXT:    cpop a1, a1
218aa68e281SKolya Panchenko; RV64-NEXT:    add a0, a0, a3
2199122c523SPengcheng Wang; RV64-NEXT:    vcompress.vm v8, v24, v7
220aa68e281SKolya Panchenko; RV64-NEXT:    add a0, a0, a1
221aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
2229122c523SPengcheng Wang; RV64-NEXT:    vse8.v v8, (a0)
223aa68e281SKolya Panchenko; RV64-NEXT:    ret
224aa68e281SKolya Panchenko;
225aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v256i8:
226aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
2279122c523SPengcheng Wang; RV32-NEXT:    addi sp, sp, -16
2289122c523SPengcheng Wang; RV32-NEXT:    .cfi_def_cfa_offset 16
2299122c523SPengcheng Wang; RV32-NEXT:    csrr a2, vlenb
2309122c523SPengcheng Wang; RV32-NEXT:    slli a2, a2, 3
2319122c523SPengcheng Wang; RV32-NEXT:    sub sp, sp, a2
2329122c523SPengcheng Wang; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
233*b6c0f1bfSLuke Lau; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2349122c523SPengcheng Wang; RV32-NEXT:    vmv8r.v v24, v16
235aa68e281SKolya Panchenko; RV32-NEXT:    li a2, 128
236aa68e281SKolya Panchenko; RV32-NEXT:    vslidedown.vi v9, v0, 1
2379122c523SPengcheng Wang; RV32-NEXT:    li a3, 32
2389122c523SPengcheng Wang; RV32-NEXT:    vmv.x.s a4, v0
239aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
2409122c523SPengcheng Wang; RV32-NEXT:    vle8.v v16, (a1)
2419122c523SPengcheng Wang; RV32-NEXT:    addi a1, sp, 16
2429122c523SPengcheng Wang; RV32-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
2439122c523SPengcheng Wang; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2449122c523SPengcheng Wang; RV32-NEXT:    vsrl.vx v10, v9, a3
2459122c523SPengcheng Wang; RV32-NEXT:    vmv.x.s a1, v9
2469122c523SPengcheng Wang; RV32-NEXT:    vsrl.vx v9, v0, a3
2479122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
2489122c523SPengcheng Wang; RV32-NEXT:    vcompress.vm v16, v24, v0
2499122c523SPengcheng Wang; RV32-NEXT:    vcpop.m a3, v0
250aa68e281SKolya Panchenko; RV32-NEXT:    cpop a4, a4
2519122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
2529122c523SPengcheng Wang; RV32-NEXT:    vmv.x.s a5, v10
2539122c523SPengcheng Wang; RV32-NEXT:    vmv.x.s a6, v9
2549122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, a3, e8, m8, ta, ma
2559122c523SPengcheng Wang; RV32-NEXT:    vse8.v v16, (a0)
2569122c523SPengcheng Wang; RV32-NEXT:    cpop a1, a1
2579122c523SPengcheng Wang; RV32-NEXT:    cpop a3, a6
2589122c523SPengcheng Wang; RV32-NEXT:    cpop a5, a5
259aa68e281SKolya Panchenko; RV32-NEXT:    add a3, a4, a3
2609122c523SPengcheng Wang; RV32-NEXT:    add a1, a1, a5
2619122c523SPengcheng Wang; RV32-NEXT:    add a1, a3, a1
2629122c523SPengcheng Wang; RV32-NEXT:    addi a3, sp, 16
2639122c523SPengcheng Wang; RV32-NEXT:    vl8r.v v24, (a3) # Unknown-size Folded Reload
264aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
2659122c523SPengcheng Wang; RV32-NEXT:    vcompress.vm v16, v24, v8
2669122c523SPengcheng Wang; RV32-NEXT:    add a0, a0, a1
2679122c523SPengcheng Wang; RV32-NEXT:    vcpop.m a1, v8
268aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
2699122c523SPengcheng Wang; RV32-NEXT:    vse8.v v16, (a0)
2709122c523SPengcheng Wang; RV32-NEXT:    csrr a0, vlenb
2719122c523SPengcheng Wang; RV32-NEXT:    slli a0, a0, 3
2729122c523SPengcheng Wang; RV32-NEXT:    add sp, sp, a0
2739122c523SPengcheng Wang; RV32-NEXT:    .cfi_def_cfa sp, 16
2749122c523SPengcheng Wang; RV32-NEXT:    addi sp, sp, 16
2759122c523SPengcheng Wang; RV32-NEXT:    .cfi_def_cfa_offset 0
276aa68e281SKolya Panchenko; RV32-NEXT:    ret
277aa68e281SKolya Panchenkoentry:
278aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v256i8(<256 x i8> %data, ptr align 1 %p, <256 x i1> %mask)
279aa68e281SKolya Panchenko  ret void
280aa68e281SKolya Panchenko}
281aa68e281SKolya Panchenko
282aa68e281SKolya Panchenko; Compress + store for i16 type
283aa68e281SKolya Panchenko
284aa68e281SKolya Panchenkodefine void @test_compresstore_v1i16(ptr %p, <1 x i1> %mask, <1 x i16> %data) {
285aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v1i16:
286aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
287aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
288aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
289aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
290aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
291aa68e281SKolya Panchenko; RV64-NEXT:    vse16.v v9, (a0)
292aa68e281SKolya Panchenko; RV64-NEXT:    ret
293aa68e281SKolya Panchenko;
294aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v1i16:
295aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
296aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
297aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
298aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
299aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
300aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v9, (a0)
301aa68e281SKolya Panchenko; RV32-NEXT:    ret
302aa68e281SKolya Panchenkoentry:
303aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v1i16(<1 x i16> %data, ptr align 2 %p, <1 x i1> %mask)
304aa68e281SKolya Panchenko  ret void
305aa68e281SKolya Panchenko}
306aa68e281SKolya Panchenko
307aa68e281SKolya Panchenkodefine void @test_compresstore_v2i16(ptr %p, <2 x i1> %mask, <2 x i16> %data) {
308aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v2i16:
309aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
310aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
311aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
312aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
313aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
314aa68e281SKolya Panchenko; RV64-NEXT:    vse16.v v9, (a0)
315aa68e281SKolya Panchenko; RV64-NEXT:    ret
316aa68e281SKolya Panchenko;
317aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v2i16:
318aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
319aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
320aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
321aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
322aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
323aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v9, (a0)
324aa68e281SKolya Panchenko; RV32-NEXT:    ret
325aa68e281SKolya Panchenkoentry:
326aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v2i16(<2 x i16> %data, ptr align 2 %p, <2 x i1> %mask)
327aa68e281SKolya Panchenko  ret void
328aa68e281SKolya Panchenko}
329aa68e281SKolya Panchenko
330aa68e281SKolya Panchenkodefine void @test_compresstore_v4i16(ptr %p, <4 x i1> %mask, <4 x i16> %data) {
331aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v4i16:
332aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
333aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
334aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
335aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
336aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
337aa68e281SKolya Panchenko; RV64-NEXT:    vse16.v v9, (a0)
338aa68e281SKolya Panchenko; RV64-NEXT:    ret
339aa68e281SKolya Panchenko;
340aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v4i16:
341aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
342aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
343aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
344aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
345aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
346aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v9, (a0)
347aa68e281SKolya Panchenko; RV32-NEXT:    ret
348aa68e281SKolya Panchenkoentry:
349aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v4i16(<4 x i16> %data, ptr align 2 %p, <4 x i1> %mask)
350aa68e281SKolya Panchenko  ret void
351aa68e281SKolya Panchenko}
352aa68e281SKolya Panchenko
353aa68e281SKolya Panchenkodefine void @test_compresstore_v8i16(ptr %p, <8 x i1> %mask, <8 x i16> %data) {
354aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v8i16:
355aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
356aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
357aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
358aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
359aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
360aa68e281SKolya Panchenko; RV64-NEXT:    vse16.v v9, (a0)
361aa68e281SKolya Panchenko; RV64-NEXT:    ret
362aa68e281SKolya Panchenko;
363aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v8i16:
364aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
365aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
366aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
367aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
368aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
369aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v9, (a0)
370aa68e281SKolya Panchenko; RV32-NEXT:    ret
371aa68e281SKolya Panchenkoentry:
372aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v8i16(<8 x i16> %data, ptr align 2 %p, <8 x i1> %mask)
373aa68e281SKolya Panchenko  ret void
374aa68e281SKolya Panchenko}
375aa68e281SKolya Panchenko
376aa68e281SKolya Panchenkodefine void @test_compresstore_v16i16(ptr %p, <16 x i1> %mask, <16 x i16> %data) {
377aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v16i16:
378aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
379aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
380aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v10, v8, v0
381aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
382aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
383aa68e281SKolya Panchenko; RV64-NEXT:    vse16.v v10, (a0)
384aa68e281SKolya Panchenko; RV64-NEXT:    ret
385aa68e281SKolya Panchenko;
386aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v16i16:
387aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
388aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
389aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v10, v8, v0
390aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
391aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
392aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v10, (a0)
393aa68e281SKolya Panchenko; RV32-NEXT:    ret
394aa68e281SKolya Panchenkoentry:
395aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v16i16(<16 x i16> %data, ptr align 2 %p, <16 x i1> %mask)
396aa68e281SKolya Panchenko  ret void
397aa68e281SKolya Panchenko}
398aa68e281SKolya Panchenko
399aa68e281SKolya Panchenkodefine void @test_compresstore_v32i16(ptr %p, <32 x i1> %mask, <32 x i16> %data) {
400aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v32i16:
401aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
402aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 32
403aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
404aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v12, v8, v0
405aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
406aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
407aa68e281SKolya Panchenko; RV64-NEXT:    vse16.v v12, (a0)
408aa68e281SKolya Panchenko; RV64-NEXT:    ret
409aa68e281SKolya Panchenko;
410aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v32i16:
411aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
412aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 32
413aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
414aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v12, v8, v0
415aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
416aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
417aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v12, (a0)
418aa68e281SKolya Panchenko; RV32-NEXT:    ret
419aa68e281SKolya Panchenkoentry:
420aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v32i16(<32 x i16> %data, ptr align 2 %p, <32 x i1> %mask)
421aa68e281SKolya Panchenko  ret void
422aa68e281SKolya Panchenko}
423aa68e281SKolya Panchenko
424aa68e281SKolya Panchenkodefine void @test_compresstore_v64i16(ptr %p, <64 x i1> %mask, <64 x i16> %data) {
425aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v64i16:
426aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
427aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 64
428aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
429aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v16, v8, v0
430aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
431aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
432aa68e281SKolya Panchenko; RV64-NEXT:    vse16.v v16, (a0)
433aa68e281SKolya Panchenko; RV64-NEXT:    ret
434aa68e281SKolya Panchenko;
435aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v64i16:
436aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
437aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 64
438aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
439aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v16, v8, v0
440aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
441aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
442aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v16, (a0)
443aa68e281SKolya Panchenko; RV32-NEXT:    ret
444aa68e281SKolya Panchenkoentry:
445aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v64i16(<64 x i16> %data, ptr align 2 %p, <64 x i1> %mask)
446aa68e281SKolya Panchenko  ret void
447aa68e281SKolya Panchenko}
448aa68e281SKolya Panchenko
449aa68e281SKolya Panchenkodefine void @test_compresstore_v128i16(ptr %p, <128 x i1> %mask, <128 x i16> %data) {
450aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v128i16:
451aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
452aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 64
453aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
454aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v24, v8, v0
455aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a2, v0
456aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
457aa68e281SKolya Panchenko; RV64-NEXT:    vslidedown.vi v8, v0, 8
458aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
45929afbd58SCraig Topper; RV64-NEXT:    vcompress.vm v0, v16, v8
4609122c523SPengcheng Wang; RV64-NEXT:    vcpop.m a1, v8
46129afbd58SCraig Topper; RV64-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
46229afbd58SCraig Topper; RV64-NEXT:    vse16.v v24, (a0)
4639122c523SPengcheng Wang; RV64-NEXT:    slli a2, a2, 1
4649122c523SPengcheng Wang; RV64-NEXT:    add a0, a0, a2
4659122c523SPengcheng Wang; RV64-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
46629afbd58SCraig Topper; RV64-NEXT:    vse16.v v0, (a0)
467aa68e281SKolya Panchenko; RV64-NEXT:    ret
468aa68e281SKolya Panchenko;
469aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v128i16:
470aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
471aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 64
4729122c523SPengcheng Wang; RV32-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
4739122c523SPengcheng Wang; RV32-NEXT:    vslidedown.vi v7, v0, 8
474aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
4759122c523SPengcheng Wang; RV32-NEXT:    vcompress.vm v24, v16, v7
4769122c523SPengcheng Wang; RV32-NEXT:    vcpop.m a2, v7
4779122c523SPengcheng Wang; RV32-NEXT:    li a3, 32
4789122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
4799122c523SPengcheng Wang; RV32-NEXT:    vmv.x.s a4, v0
4809122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
4819122c523SPengcheng Wang; RV32-NEXT:    vcompress.vm v16, v8, v0
4829122c523SPengcheng Wang; RV32-NEXT:    vcpop.m a1, v0
4839122c523SPengcheng Wang; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
4849122c523SPengcheng Wang; RV32-NEXT:    vsrl.vx v8, v0, a3
4859122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
4869122c523SPengcheng Wang; RV32-NEXT:    vse16.v v16, (a0)
4879122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
4889122c523SPengcheng Wang; RV32-NEXT:    vmv.x.s a1, v8
4899122c523SPengcheng Wang; RV32-NEXT:    cpop a1, a1
4909122c523SPengcheng Wang; RV32-NEXT:    cpop a3, a4
4919122c523SPengcheng Wang; RV32-NEXT:    add a1, a3, a1
4929122c523SPengcheng Wang; RV32-NEXT:    slli a1, a1, 1
4939122c523SPengcheng Wang; RV32-NEXT:    add a0, a0, a1
494aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
495aa68e281SKolya Panchenko; RV32-NEXT:    vse16.v v24, (a0)
496aa68e281SKolya Panchenko; RV32-NEXT:    ret
497aa68e281SKolya Panchenkoentry:
498aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v128i16(<128 x i16> %data, ptr align 2 %p, <128 x i1> %mask)
499aa68e281SKolya Panchenko  ret void
500aa68e281SKolya Panchenko}
501aa68e281SKolya Panchenko
502aa68e281SKolya Panchenko; Compress + store for i32 type
503aa68e281SKolya Panchenko
504aa68e281SKolya Panchenkodefine void @test_compresstore_v1i32(ptr %p, <1 x i1> %mask, <1 x i32> %data) {
505aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v1i32:
506aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
507aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
508aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
509aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
510aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
511aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v9, (a0)
512aa68e281SKolya Panchenko; RV64-NEXT:    ret
513aa68e281SKolya Panchenko;
514aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v1i32:
515aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
516aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
517aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
518aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
519aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
520aa68e281SKolya Panchenko; RV32-NEXT:    vse32.v v9, (a0)
521aa68e281SKolya Panchenko; RV32-NEXT:    ret
522aa68e281SKolya Panchenkoentry:
523aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v1i32(<1 x i32> %data, ptr align 4 %p, <1 x i1> %mask)
524aa68e281SKolya Panchenko  ret void
525aa68e281SKolya Panchenko}
526aa68e281SKolya Panchenko
527aa68e281SKolya Panchenkodefine void @test_compresstore_v2i32(ptr %p, <2 x i1> %mask, <2 x i32> %data) {
528aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v2i32:
529aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
530aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
531aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
532aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
533aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
534aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v9, (a0)
535aa68e281SKolya Panchenko; RV64-NEXT:    ret
536aa68e281SKolya Panchenko;
537aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v2i32:
538aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
539aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
540aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
541aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
542aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
543aa68e281SKolya Panchenko; RV32-NEXT:    vse32.v v9, (a0)
544aa68e281SKolya Panchenko; RV32-NEXT:    ret
545aa68e281SKolya Panchenkoentry:
546aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v2i32(<2 x i32> %data, ptr align 4 %p, <2 x i1> %mask)
547aa68e281SKolya Panchenko  ret void
548aa68e281SKolya Panchenko}
549aa68e281SKolya Panchenko
550aa68e281SKolya Panchenkodefine void @test_compresstore_v4i32(ptr %p, <4 x i1> %mask, <4 x i32> %data) {
551aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v4i32:
552aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
553aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
554aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
555aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
556aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
557aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v9, (a0)
558aa68e281SKolya Panchenko; RV64-NEXT:    ret
559aa68e281SKolya Panchenko;
560aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v4i32:
561aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
562aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
563aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
564aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
565aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
566aa68e281SKolya Panchenko; RV32-NEXT:    vse32.v v9, (a0)
567aa68e281SKolya Panchenko; RV32-NEXT:    ret
568aa68e281SKolya Panchenkoentry:
569aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v4i32(<4 x i32> %data, ptr align 4 %p, <4 x i1> %mask)
570aa68e281SKolya Panchenko  ret void
571aa68e281SKolya Panchenko}
572aa68e281SKolya Panchenko
573aa68e281SKolya Panchenkodefine void @test_compresstore_v8i32(ptr %p, <8 x i1> %mask, <8 x i32> %data) {
574aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v8i32:
575aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
576aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
577aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v10, v8, v0
578aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
579aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
580aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v10, (a0)
581aa68e281SKolya Panchenko; RV64-NEXT:    ret
582aa68e281SKolya Panchenko;
583aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v8i32:
584aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
585aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
586aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v10, v8, v0
587aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
588aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
589aa68e281SKolya Panchenko; RV32-NEXT:    vse32.v v10, (a0)
590aa68e281SKolya Panchenko; RV32-NEXT:    ret
591aa68e281SKolya Panchenkoentry:
592aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v8i32(<8 x i32> %data, ptr align 4 %p, <8 x i1> %mask)
593aa68e281SKolya Panchenko  ret void
594aa68e281SKolya Panchenko}
595aa68e281SKolya Panchenko
596aa68e281SKolya Panchenkodefine void @test_compresstore_v16i32(ptr %p, <16 x i1> %mask, <16 x i32> %data) {
597aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v16i32:
598aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
599aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
600aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v12, v8, v0
601aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
602aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
603aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v12, (a0)
604aa68e281SKolya Panchenko; RV64-NEXT:    ret
605aa68e281SKolya Panchenko;
606aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v16i32:
607aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
608aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
609aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v12, v8, v0
610aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
611aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
612aa68e281SKolya Panchenko; RV32-NEXT:    vse32.v v12, (a0)
613aa68e281SKolya Panchenko; RV32-NEXT:    ret
614aa68e281SKolya Panchenkoentry:
615aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v16i32(<16 x i32> %data, ptr align 4 %p, <16 x i1> %mask)
616aa68e281SKolya Panchenko  ret void
617aa68e281SKolya Panchenko}
618aa68e281SKolya Panchenko
619aa68e281SKolya Panchenkodefine void @test_compresstore_v32i32(ptr %p, <32 x i1> %mask, <32 x i32> %data) {
620aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v32i32:
621aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
622aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 32
623aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
624aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v16, v8, v0
625aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
626aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
627aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v16, (a0)
628aa68e281SKolya Panchenko; RV64-NEXT:    ret
629aa68e281SKolya Panchenko;
630aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v32i32:
631aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
632aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 32
633aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
634aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v16, v8, v0
635aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
636aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
637aa68e281SKolya Panchenko; RV32-NEXT:    vse32.v v16, (a0)
638aa68e281SKolya Panchenko; RV32-NEXT:    ret
639aa68e281SKolya Panchenkoentry:
640aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v32i32(<32 x i32> %data, ptr align 4 %p, <32 x i1> %mask)
641aa68e281SKolya Panchenko  ret void
642aa68e281SKolya Panchenko}
643aa68e281SKolya Panchenko
644aa68e281SKolya Panchenkodefine void @test_compresstore_v64i32(ptr %p, <64 x i1> %mask, <64 x i32> %data) {
645aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v64i32:
646aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
647aa68e281SKolya Panchenko; RV64-NEXT:    li a1, 32
648aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
649aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v24, v8, v0
650aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a2, v0
651aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
652aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v24, (a0)
653aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
654aa68e281SKolya Panchenko; RV64-NEXT:    vslidedown.vi v8, v0, 4
655aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
656c9fa3195SLuke Lau; RV64-NEXT:    vmv.x.s a1, v0
657aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v24, v16, v8
658c9fa3195SLuke Lau; RV64-NEXT:    vcpop.m a2, v8
659c9fa3195SLuke Lau; RV64-NEXT:    cpopw a1, a1
660c9fa3195SLuke Lau; RV64-NEXT:    slli a1, a1, 2
661c9fa3195SLuke Lau; RV64-NEXT:    add a0, a0, a1
662c9fa3195SLuke Lau; RV64-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
663aa68e281SKolya Panchenko; RV64-NEXT:    vse32.v v24, (a0)
664aa68e281SKolya Panchenko; RV64-NEXT:    ret
665aa68e281SKolya Panchenko;
666aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v64i32:
667aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
668aa68e281SKolya Panchenko; RV32-NEXT:    li a1, 32
669aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
670aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v24, v8, v0
671aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a2, v0
672aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
673aa68e281SKolya Panchenko; RV32-NEXT:    vslidedown.vi v8, v0, 4
674aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
67529afbd58SCraig Topper; RV32-NEXT:    vcompress.vm v0, v16, v8
676aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v8
67729afbd58SCraig Topper; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
67829afbd58SCraig Topper; RV32-NEXT:    vse32.v v24, (a0)
679aa68e281SKolya Panchenko; RV32-NEXT:    slli a2, a2, 2
680aa68e281SKolya Panchenko; RV32-NEXT:    add a0, a0, a2
681aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
68229afbd58SCraig Topper; RV32-NEXT:    vse32.v v0, (a0)
683aa68e281SKolya Panchenko; RV32-NEXT:    ret
684aa68e281SKolya Panchenkoentry:
685aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v64i32(<64 x i32> %data, ptr align 4 %p, <64 x i1> %mask)
686aa68e281SKolya Panchenko  ret void
687aa68e281SKolya Panchenko}
688aa68e281SKolya Panchenko
689aa68e281SKolya Panchenko; Compress + store for i64 type
690aa68e281SKolya Panchenko
691aa68e281SKolya Panchenkodefine void @test_compresstore_v1i64(ptr %p, <1 x i1> %mask, <1 x i64> %data) {
692aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v1i64:
693aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
694aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
695aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
696aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
697aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
698aa68e281SKolya Panchenko; RV64-NEXT:    vse64.v v9, (a0)
699aa68e281SKolya Panchenko; RV64-NEXT:    ret
700aa68e281SKolya Panchenko;
701aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v1i64:
702aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
703aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
704aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
705aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
706aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
707aa68e281SKolya Panchenko; RV32-NEXT:    vse64.v v9, (a0)
708aa68e281SKolya Panchenko; RV32-NEXT:    ret
709aa68e281SKolya Panchenkoentry:
710aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v1i64(<1 x i64> %data, ptr align 8 %p, <1 x i1> %mask)
711aa68e281SKolya Panchenko  ret void
712aa68e281SKolya Panchenko}
713aa68e281SKolya Panchenko
714aa68e281SKolya Panchenkodefine void @test_compresstore_v2i64(ptr %p, <2 x i1> %mask, <2 x i64> %data) {
715aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v2i64:
716aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
717aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
718aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v9, v8, v0
719aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
720aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
721aa68e281SKolya Panchenko; RV64-NEXT:    vse64.v v9, (a0)
722aa68e281SKolya Panchenko; RV64-NEXT:    ret
723aa68e281SKolya Panchenko;
724aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v2i64:
725aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
726aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
727aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v9, v8, v0
728aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
729aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
730aa68e281SKolya Panchenko; RV32-NEXT:    vse64.v v9, (a0)
731aa68e281SKolya Panchenko; RV32-NEXT:    ret
732aa68e281SKolya Panchenkoentry:
733aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v2i64(<2 x i64> %data, ptr align 8 %p, <2 x i1> %mask)
734aa68e281SKolya Panchenko  ret void
735aa68e281SKolya Panchenko}
736aa68e281SKolya Panchenko
737aa68e281SKolya Panchenkodefine void @test_compresstore_v4i64(ptr %p, <4 x i1> %mask, <4 x i64> %data) {
738aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v4i64:
739aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
740aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
741aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v10, v8, v0
742aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
743aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
744aa68e281SKolya Panchenko; RV64-NEXT:    vse64.v v10, (a0)
745aa68e281SKolya Panchenko; RV64-NEXT:    ret
746aa68e281SKolya Panchenko;
747aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v4i64:
748aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
749aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
750aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v10, v8, v0
751aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
752aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
753aa68e281SKolya Panchenko; RV32-NEXT:    vse64.v v10, (a0)
754aa68e281SKolya Panchenko; RV32-NEXT:    ret
755aa68e281SKolya Panchenkoentry:
756aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v4i64(<4 x i64> %data, ptr align 8 %p, <4 x i1> %mask)
757aa68e281SKolya Panchenko  ret void
758aa68e281SKolya Panchenko}
759aa68e281SKolya Panchenko
760aa68e281SKolya Panchenkodefine void @test_compresstore_v8i64(ptr %p, <8 x i1> %mask, <8 x i64> %data) {
761aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v8i64:
762aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
763aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
764aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v12, v8, v0
765aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
766aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
767aa68e281SKolya Panchenko; RV64-NEXT:    vse64.v v12, (a0)
768aa68e281SKolya Panchenko; RV64-NEXT:    ret
769aa68e281SKolya Panchenko;
770aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v8i64:
771aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
772aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
773aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v12, v8, v0
774aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
775aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
776aa68e281SKolya Panchenko; RV32-NEXT:    vse64.v v12, (a0)
777aa68e281SKolya Panchenko; RV32-NEXT:    ret
778aa68e281SKolya Panchenkoentry:
779aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v8i64(<8 x i64> %data, ptr align 8 %p, <8 x i1> %mask)
780aa68e281SKolya Panchenko  ret void
781aa68e281SKolya Panchenko}
782aa68e281SKolya Panchenko
783aa68e281SKolya Panchenkodefine void @test_compresstore_v16i64(ptr %p, <16 x i1> %mask, <16 x i64> %data) {
784aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v16i64:
785aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
786aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
787aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v16, v8, v0
788aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
789aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
790aa68e281SKolya Panchenko; RV64-NEXT:    vse64.v v16, (a0)
791aa68e281SKolya Panchenko; RV64-NEXT:    ret
792aa68e281SKolya Panchenko;
793aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v16i64:
794aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
795aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
796aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v16, v8, v0
797aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
798aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
799aa68e281SKolya Panchenko; RV32-NEXT:    vse64.v v16, (a0)
800aa68e281SKolya Panchenko; RV32-NEXT:    ret
801aa68e281SKolya Panchenkoentry:
802aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v16i64(<16 x i64> %data, ptr align 8 %p, <16 x i1> %mask)
803aa68e281SKolya Panchenko  ret void
804aa68e281SKolya Panchenko}
805aa68e281SKolya Panchenko
806aa68e281SKolya Panchenkodefine void @test_compresstore_v32i64(ptr %p, <32 x i1> %mask, <32 x i64> %data) {
807aa68e281SKolya Panchenko; RV64-LABEL: test_compresstore_v32i64:
808aa68e281SKolya Panchenko; RV64:       # %bb.0: # %entry
809aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
810aa68e281SKolya Panchenko; RV64-NEXT:    vcompress.vm v24, v8, v0
811aa68e281SKolya Panchenko; RV64-NEXT:    vcpop.m a1, v0
812aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
813aa68e281SKolya Panchenko; RV64-NEXT:    vse64.v v24, (a0)
814aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
815675e7bd1SPiyou Chen; RV64-NEXT:    vslidedown.vi v8, v0, 2
8169122c523SPengcheng Wang; RV64-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
8179122c523SPengcheng Wang; RV64-NEXT:    vmv.x.s a1, v0
818aa68e281SKolya Panchenko; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
819675e7bd1SPiyou Chen; RV64-NEXT:    vcompress.vm v24, v16, v8
820aa68e281SKolya Panchenko; RV64-NEXT:    zext.h a1, a1
821aa68e281SKolya Panchenko; RV64-NEXT:    cpopw a1, a1
822aa68e281SKolya Panchenko; RV64-NEXT:    slli a1, a1, 3
823aa68e281SKolya Panchenko; RV64-NEXT:    add a0, a0, a1
824675e7bd1SPiyou Chen; RV64-NEXT:    vcpop.m a1, v8
825aa68e281SKolya Panchenko; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
826675e7bd1SPiyou Chen; RV64-NEXT:    vse64.v v24, (a0)
827aa68e281SKolya Panchenko; RV64-NEXT:    ret
828aa68e281SKolya Panchenko;
829aa68e281SKolya Panchenko; RV32-LABEL: test_compresstore_v32i64:
830aa68e281SKolya Panchenko; RV32:       # %bb.0: # %entry
831aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
832aa68e281SKolya Panchenko; RV32-NEXT:    vcompress.vm v24, v8, v0
833aa68e281SKolya Panchenko; RV32-NEXT:    vcpop.m a1, v0
834aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
835aa68e281SKolya Panchenko; RV32-NEXT:    vse64.v v24, (a0)
836aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
837675e7bd1SPiyou Chen; RV32-NEXT:    vslidedown.vi v8, v0, 2
8389122c523SPengcheng Wang; RV32-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
8399122c523SPengcheng Wang; RV32-NEXT:    vmv.x.s a1, v0
840aa68e281SKolya Panchenko; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
841675e7bd1SPiyou Chen; RV32-NEXT:    vcompress.vm v24, v16, v8
842aa68e281SKolya Panchenko; RV32-NEXT:    zext.h a1, a1
843aa68e281SKolya Panchenko; RV32-NEXT:    cpop a1, a1
844aa68e281SKolya Panchenko; RV32-NEXT:    slli a1, a1, 3
845aa68e281SKolya Panchenko; RV32-NEXT:    add a0, a0, a1
846675e7bd1SPiyou Chen; RV32-NEXT:    vcpop.m a1, v8
847aa68e281SKolya Panchenko; RV32-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
848675e7bd1SPiyou Chen; RV32-NEXT:    vse64.v v24, (a0)
849aa68e281SKolya Panchenko; RV32-NEXT:    ret
850aa68e281SKolya Panchenkoentry:
851aa68e281SKolya Panchenko  tail call void @llvm.masked.compressstore.v32i64(<32 x i64> %data, ptr align 8 %p, <32 x i1> %mask)
852aa68e281SKolya Panchenko  ret void
853aa68e281SKolya Panchenko}
854aa68e281SKolya Panchenko
855aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v1i8(<1 x i8>, ptr, <1 x i1>)
856aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v2i8(<2 x i8>, ptr, <2 x i1>)
857aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v4i8(<4 x i8>, ptr, <4 x i1>)
858aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v8i8(<8 x i8>, ptr, <8 x i1>)
859aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v16i8(<16 x i8>, ptr, <16 x i1>)
860aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v32i8(<32 x i8>, ptr, <32 x i1>)
861aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v64i8(<64 x i8>, ptr, <64 x i1>)
862aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v128i8(<128 x i8>, ptr, <128 x i1>)
863aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v256i8(<256 x i8>, ptr, <256 x i1>)
864aa68e281SKolya Panchenko
865aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v1i16(<1 x i16>, ptr, <1 x i1>)
866aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v2i16(<2 x i16>, ptr, <2 x i1>)
867aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v4i16(<4 x i16>, ptr, <4 x i1>)
868aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v8i16(<8 x i16>, ptr, <8 x i1>)
869aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v16i16(<16 x i16>, ptr, <16 x i1>)
870aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v32i16(<32 x i16>, ptr, <32 x i1>)
871aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v64i16(<64 x i16>, ptr, <64 x i1>)
872aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v128i16(<128 x i16>, ptr, <128 x i1>)
873aa68e281SKolya Panchenko
874aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v1i32(<1 x i32>, ptr, <1 x i1>)
875aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v2i32(<2 x i32>, ptr, <2 x i1>)
876aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v4i32(<4 x i32>, ptr, <4 x i1>)
877aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v8i32(<8 x i32>, ptr, <8 x i1>)
878aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v16i32(<16 x i32>, ptr, <16 x i1>)
879aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v32i32(<32 x i32>, ptr, <32 x i1>)
880aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v64i32(<64 x i32>, ptr, <64 x i1>)
881aa68e281SKolya Panchenko
882aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v1i64(<1 x i64>, ptr, <1 x i1>)
883aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v2i64(<2 x i64>, ptr, <2 x i1>)
884aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v4i64(<4 x i64>, ptr, <4 x i1>)
885aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v8i64(<8 x i64>, ptr, <8 x i1>)
886aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v16i64(<16 x i64>, ptr, <16 x i1>)
887aa68e281SKolya Panchenkodeclare void @llvm.masked.compressstore.v32i64(<32 x i64>, ptr, <32 x i1>)
888