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