1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfh,+zvfbfmin < %s | FileCheck %s 3; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfh,+zvfbfmin < %s | FileCheck %s 4; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfhmin,+zvfbfmin < %s | FileCheck %s 5; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfhmin,+zvfbfmin < %s | FileCheck %s 6 7; Vector compress for i8 type 8 9define <vscale x 1 x i8> @vector_compress_nxv1i8(<vscale x 1 x i8> %data, <vscale x 1 x i1> %mask) { 10; CHECK-LABEL: vector_compress_nxv1i8: 11; CHECK: # %bb.0: 12; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma 13; CHECK-NEXT: vcompress.vm v9, v8, v0 14; CHECK-NEXT: vmv1r.v v8, v9 15; CHECK-NEXT: ret 16 %ret = call <vscale x 1 x i8> @llvm.experimental.vector.compress.nxv1i8(<vscale x 1 x i8> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i8> undef) 17 ret <vscale x 1 x i8> %ret 18} 19 20define <vscale x 1 x i8> @vector_compress_nxv1i8_passthru(<vscale x 1 x i8> %passthru, <vscale x 1 x i8> %data, <vscale x 1 x i1> %mask) { 21; CHECK-LABEL: vector_compress_nxv1i8_passthru: 22; CHECK: # %bb.0: 23; CHECK-NEXT: vsetvli a0, zero, e8, mf8, tu, ma 24; CHECK-NEXT: vcompress.vm v8, v9, v0 25; CHECK-NEXT: ret 26 %ret = call <vscale x 1 x i8> @llvm.experimental.vector.compress.nxv1i8(<vscale x 1 x i8> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i8> %passthru) 27 ret <vscale x 1 x i8> %ret 28} 29 30define <vscale x 2 x i8> @vector_compress_nxv2i8(<vscale x 2 x i8> %data, <vscale x 2 x i1> %mask) { 31; CHECK-LABEL: vector_compress_nxv2i8: 32; CHECK: # %bb.0: 33; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma 34; CHECK-NEXT: vcompress.vm v9, v8, v0 35; CHECK-NEXT: vmv1r.v v8, v9 36; CHECK-NEXT: ret 37 %ret = call <vscale x 2 x i8> @llvm.experimental.vector.compress.nxv2i8(<vscale x 2 x i8> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i8> undef) 38 ret <vscale x 2 x i8> %ret 39} 40 41define <vscale x 2 x i8> @vector_compress_nxv2i8_passthru(<vscale x 2 x i8> %passthru, <vscale x 2 x i8> %data, <vscale x 2 x i1> %mask) { 42; CHECK-LABEL: vector_compress_nxv2i8_passthru: 43; CHECK: # %bb.0: 44; CHECK-NEXT: vsetvli a0, zero, e8, mf4, tu, ma 45; CHECK-NEXT: vcompress.vm v8, v9, v0 46; CHECK-NEXT: ret 47 %ret = call <vscale x 2 x i8> @llvm.experimental.vector.compress.nxv2i8(<vscale x 2 x i8> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i8> %passthru) 48 ret <vscale x 2 x i8> %ret 49} 50 51define <vscale x 4 x i8> @vector_compress_nxv4i8(<vscale x 4 x i8> %data, <vscale x 4 x i1> %mask) { 52; CHECK-LABEL: vector_compress_nxv4i8: 53; CHECK: # %bb.0: 54; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma 55; CHECK-NEXT: vcompress.vm v9, v8, v0 56; CHECK-NEXT: vmv1r.v v8, v9 57; CHECK-NEXT: ret 58 %ret = call <vscale x 4 x i8> @llvm.experimental.vector.compress.nxv4i8(<vscale x 4 x i8> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i8> undef) 59 ret <vscale x 4 x i8> %ret 60} 61 62define <vscale x 4 x i8> @vector_compress_nxv4i8_passthru(<vscale x 4 x i8> %passthru, <vscale x 4 x i8> %data, <vscale x 4 x i1> %mask) { 63; CHECK-LABEL: vector_compress_nxv4i8_passthru: 64; CHECK: # %bb.0: 65; CHECK-NEXT: vsetvli a0, zero, e8, mf2, tu, ma 66; CHECK-NEXT: vcompress.vm v8, v9, v0 67; CHECK-NEXT: ret 68 %ret = call <vscale x 4 x i8> @llvm.experimental.vector.compress.nxv4i8(<vscale x 4 x i8> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i8> %passthru) 69 ret <vscale x 4 x i8> %ret 70} 71 72define <vscale x 8 x i8> @vector_compress_nxv8i8(<vscale x 8 x i8> %data, <vscale x 8 x i1> %mask) { 73; CHECK-LABEL: vector_compress_nxv8i8: 74; CHECK: # %bb.0: 75; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma 76; CHECK-NEXT: vcompress.vm v9, v8, v0 77; CHECK-NEXT: vmv.v.v v8, v9 78; CHECK-NEXT: ret 79 %ret = call <vscale x 8 x i8> @llvm.experimental.vector.compress.nxv8i8(<vscale x 8 x i8> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i8> undef) 80 ret <vscale x 8 x i8> %ret 81} 82 83define <vscale x 8 x i8> @vector_compress_nxv8i8_passthru(<vscale x 8 x i8> %passthru, <vscale x 8 x i8> %data, <vscale x 8 x i1> %mask) { 84; CHECK-LABEL: vector_compress_nxv8i8_passthru: 85; CHECK: # %bb.0: 86; CHECK-NEXT: vsetvli a0, zero, e8, m1, tu, ma 87; CHECK-NEXT: vcompress.vm v8, v9, v0 88; CHECK-NEXT: ret 89 %ret = call <vscale x 8 x i8> @llvm.experimental.vector.compress.nxv8i8(<vscale x 8 x i8> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i8> %passthru) 90 ret <vscale x 8 x i8> %ret 91} 92 93define <vscale x 16 x i8> @vector_compress_nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %mask) { 94; CHECK-LABEL: vector_compress_nxv16i8: 95; CHECK: # %bb.0: 96; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma 97; CHECK-NEXT: vcompress.vm v10, v8, v0 98; CHECK-NEXT: vmv.v.v v8, v10 99; CHECK-NEXT: ret 100 %ret = call <vscale x 16 x i8> @llvm.experimental.vector.compress.nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %mask, <vscale x 16 x i8> undef) 101 ret <vscale x 16 x i8> %ret 102} 103 104define <vscale x 16 x i8> @vector_compress_nxv16i8_passthru(<vscale x 16 x i8> %passthru, <vscale x 16 x i8> %data, <vscale x 16 x i1> %mask) { 105; CHECK-LABEL: vector_compress_nxv16i8_passthru: 106; CHECK: # %bb.0: 107; CHECK-NEXT: vsetvli a0, zero, e8, m2, tu, ma 108; CHECK-NEXT: vcompress.vm v8, v10, v0 109; CHECK-NEXT: ret 110 %ret = call <vscale x 16 x i8> @llvm.experimental.vector.compress.nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %mask, <vscale x 16 x i8> %passthru) 111 ret <vscale x 16 x i8> %ret 112} 113 114define <vscale x 32 x i8> @vector_compress_nxv32i8(<vscale x 32 x i8> %data, <vscale x 32 x i1> %mask) { 115; CHECK-LABEL: vector_compress_nxv32i8: 116; CHECK: # %bb.0: 117; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma 118; CHECK-NEXT: vcompress.vm v12, v8, v0 119; CHECK-NEXT: vmv.v.v v8, v12 120; CHECK-NEXT: ret 121 %ret = call <vscale x 32 x i8> @llvm.experimental.vector.compress.nxv32i8(<vscale x 32 x i8> %data, <vscale x 32 x i1> %mask, <vscale x 32 x i8> undef) 122 ret <vscale x 32 x i8> %ret 123} 124 125define <vscale x 32 x i8> @vector_compress_nxv32i8_passthru(<vscale x 32 x i8> %passthru, <vscale x 32 x i8> %data, <vscale x 32 x i1> %mask) { 126; CHECK-LABEL: vector_compress_nxv32i8_passthru: 127; CHECK: # %bb.0: 128; CHECK-NEXT: vsetvli a0, zero, e8, m4, tu, ma 129; CHECK-NEXT: vcompress.vm v8, v12, v0 130; CHECK-NEXT: ret 131 %ret = call <vscale x 32 x i8> @llvm.experimental.vector.compress.nxv32i8(<vscale x 32 x i8> %data, <vscale x 32 x i1> %mask, <vscale x 32 x i8> %passthru) 132 ret <vscale x 32 x i8> %ret 133} 134 135define <vscale x 64 x i8> @vector_compress_nxv64i8(<vscale x 64 x i8> %data, <vscale x 64 x i1> %mask) { 136; CHECK-LABEL: vector_compress_nxv64i8: 137; CHECK: # %bb.0: 138; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma 139; CHECK-NEXT: vcompress.vm v16, v8, v0 140; CHECK-NEXT: vmv.v.v v8, v16 141; CHECK-NEXT: ret 142 %ret = call <vscale x 64 x i8> @llvm.experimental.vector.compress.nxv64i8(<vscale x 64 x i8> %data, <vscale x 64 x i1> %mask, <vscale x 64 x i8> undef) 143 ret <vscale x 64 x i8> %ret 144} 145 146define <vscale x 64 x i8> @vector_compress_nxv64i8_passthru(<vscale x 64 x i8> %passthru, <vscale x 64 x i8> %data, <vscale x 64 x i1> %mask) { 147; CHECK-LABEL: vector_compress_nxv64i8_passthru: 148; CHECK: # %bb.0: 149; CHECK-NEXT: vsetvli a0, zero, e8, m8, tu, ma 150; CHECK-NEXT: vcompress.vm v8, v16, v0 151; CHECK-NEXT: ret 152 %ret = call <vscale x 64 x i8> @llvm.experimental.vector.compress.nxv64i8(<vscale x 64 x i8> %data, <vscale x 64 x i1> %mask, <vscale x 64 x i8> %passthru) 153 ret <vscale x 64 x i8> %ret 154} 155 156; Vector compress for i16 type 157 158define <vscale x 1 x i16> @vector_compress_nxv1i16(<vscale x 1 x i16> %data, <vscale x 1 x i1> %mask) { 159; CHECK-LABEL: vector_compress_nxv1i16: 160; CHECK: # %bb.0: 161; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 162; CHECK-NEXT: vcompress.vm v9, v8, v0 163; CHECK-NEXT: vmv1r.v v8, v9 164; CHECK-NEXT: ret 165 %ret = call <vscale x 1 x i16> @llvm.experimental.vector.compress.nxv1i16(<vscale x 1 x i16> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i16> undef) 166 ret <vscale x 1 x i16> %ret 167} 168 169define <vscale x 1 x i16> @vector_compress_nxv1i16_passthru(<vscale x 1 x i16> %passthru, <vscale x 1 x i16> %data, <vscale x 1 x i1> %mask) { 170; CHECK-LABEL: vector_compress_nxv1i16_passthru: 171; CHECK: # %bb.0: 172; CHECK-NEXT: vsetvli a0, zero, e16, mf4, tu, ma 173; CHECK-NEXT: vcompress.vm v8, v9, v0 174; CHECK-NEXT: ret 175 %ret = call <vscale x 1 x i16> @llvm.experimental.vector.compress.nxv1i16(<vscale x 1 x i16> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i16> %passthru) 176 ret <vscale x 1 x i16> %ret 177} 178 179define <vscale x 2 x i16> @vector_compress_nxv2i16(<vscale x 2 x i16> %data, <vscale x 2 x i1> %mask) { 180; CHECK-LABEL: vector_compress_nxv2i16: 181; CHECK: # %bb.0: 182; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 183; CHECK-NEXT: vcompress.vm v9, v8, v0 184; CHECK-NEXT: vmv1r.v v8, v9 185; CHECK-NEXT: ret 186 %ret = call <vscale x 2 x i16> @llvm.experimental.vector.compress.nxv2i16(<vscale x 2 x i16> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i16> undef) 187 ret <vscale x 2 x i16> %ret 188} 189 190define <vscale x 2 x i16> @vector_compress_nxv2i16_passthru(<vscale x 2 x i16> %passthru, <vscale x 2 x i16> %data, <vscale x 2 x i1> %mask) { 191; CHECK-LABEL: vector_compress_nxv2i16_passthru: 192; CHECK: # %bb.0: 193; CHECK-NEXT: vsetvli a0, zero, e16, mf2, tu, ma 194; CHECK-NEXT: vcompress.vm v8, v9, v0 195; CHECK-NEXT: ret 196 %ret = call <vscale x 2 x i16> @llvm.experimental.vector.compress.nxv2i16(<vscale x 2 x i16> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i16> %passthru) 197 ret <vscale x 2 x i16> %ret 198} 199 200define <vscale x 4 x i16> @vector_compress_nxv4i16(<vscale x 4 x i16> %data, <vscale x 4 x i1> %mask) { 201; CHECK-LABEL: vector_compress_nxv4i16: 202; CHECK: # %bb.0: 203; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 204; CHECK-NEXT: vcompress.vm v9, v8, v0 205; CHECK-NEXT: vmv.v.v v8, v9 206; CHECK-NEXT: ret 207 %ret = call <vscale x 4 x i16> @llvm.experimental.vector.compress.nxv4i16(<vscale x 4 x i16> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i16> undef) 208 ret <vscale x 4 x i16> %ret 209} 210 211define <vscale x 4 x i16> @vector_compress_nxv4i16_passthru(<vscale x 4 x i16> %passthru, <vscale x 4 x i16> %data, <vscale x 4 x i1> %mask) { 212; CHECK-LABEL: vector_compress_nxv4i16_passthru: 213; CHECK: # %bb.0: 214; CHECK-NEXT: vsetvli a0, zero, e16, m1, tu, ma 215; CHECK-NEXT: vcompress.vm v8, v9, v0 216; CHECK-NEXT: ret 217 %ret = call <vscale x 4 x i16> @llvm.experimental.vector.compress.nxv4i16(<vscale x 4 x i16> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i16> %passthru) 218 ret <vscale x 4 x i16> %ret 219} 220 221define <vscale x 8 x i16> @vector_compress_nxv8i16(<vscale x 8 x i16> %data, <vscale x 8 x i1> %mask) { 222; CHECK-LABEL: vector_compress_nxv8i16: 223; CHECK: # %bb.0: 224; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 225; CHECK-NEXT: vcompress.vm v10, v8, v0 226; CHECK-NEXT: vmv.v.v v8, v10 227; CHECK-NEXT: ret 228 %ret = call <vscale x 8 x i16> @llvm.experimental.vector.compress.nxv8i16(<vscale x 8 x i16> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i16> undef) 229 ret <vscale x 8 x i16> %ret 230} 231 232define <vscale x 8 x i16> @vector_compress_nxv8i16_passthru(<vscale x 8 x i16> %passthru, <vscale x 8 x i16> %data, <vscale x 8 x i1> %mask) { 233; CHECK-LABEL: vector_compress_nxv8i16_passthru: 234; CHECK: # %bb.0: 235; CHECK-NEXT: vsetvli a0, zero, e16, m2, tu, ma 236; CHECK-NEXT: vcompress.vm v8, v10, v0 237; CHECK-NEXT: ret 238 %ret = call <vscale x 8 x i16> @llvm.experimental.vector.compress.nxv8i16(<vscale x 8 x i16> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i16> %passthru) 239 ret <vscale x 8 x i16> %ret 240} 241 242define <vscale x 16 x i16> @vector_compress_nxv16i16(<vscale x 16 x i16> %data, <vscale x 16 x i1> %mask) { 243; CHECK-LABEL: vector_compress_nxv16i16: 244; CHECK: # %bb.0: 245; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 246; CHECK-NEXT: vcompress.vm v12, v8, v0 247; CHECK-NEXT: vmv.v.v v8, v12 248; CHECK-NEXT: ret 249 %ret = call <vscale x 16 x i16> @llvm.experimental.vector.compress.nxv16i16(<vscale x 16 x i16> %data, <vscale x 16 x i1> %mask, <vscale x 16 x i16> undef) 250 ret <vscale x 16 x i16> %ret 251} 252 253define <vscale x 16 x i16> @vector_compress_nxv16i16_passthru(<vscale x 16 x i16> %passthru, <vscale x 16 x i16> %data, <vscale x 16 x i1> %mask) { 254; CHECK-LABEL: vector_compress_nxv16i16_passthru: 255; CHECK: # %bb.0: 256; CHECK-NEXT: vsetvli a0, zero, e16, m4, tu, ma 257; CHECK-NEXT: vcompress.vm v8, v12, v0 258; CHECK-NEXT: ret 259 %ret = call <vscale x 16 x i16> @llvm.experimental.vector.compress.nxv16i16(<vscale x 16 x i16> %data, <vscale x 16 x i1> %mask, <vscale x 16 x i16> %passthru) 260 ret <vscale x 16 x i16> %ret 261} 262 263define <vscale x 32 x i16> @vector_compress_nxv32i16(<vscale x 32 x i16> %data, <vscale x 32 x i1> %mask) { 264; CHECK-LABEL: vector_compress_nxv32i16: 265; CHECK: # %bb.0: 266; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 267; CHECK-NEXT: vcompress.vm v16, v8, v0 268; CHECK-NEXT: vmv.v.v v8, v16 269; CHECK-NEXT: ret 270 %ret = call <vscale x 32 x i16> @llvm.experimental.vector.compress.nxv32i16(<vscale x 32 x i16> %data, <vscale x 32 x i1> %mask, <vscale x 32 x i16> undef) 271 ret <vscale x 32 x i16> %ret 272} 273 274define <vscale x 32 x i16> @vector_compress_nxv32i16_passthru(<vscale x 32 x i16> %passthru, <vscale x 32 x i16> %data, <vscale x 32 x i1> %mask) { 275; CHECK-LABEL: vector_compress_nxv32i16_passthru: 276; CHECK: # %bb.0: 277; CHECK-NEXT: vsetvli a0, zero, e16, m8, tu, ma 278; CHECK-NEXT: vcompress.vm v8, v16, v0 279; CHECK-NEXT: ret 280 %ret = call <vscale x 32 x i16> @llvm.experimental.vector.compress.nxv32i16(<vscale x 32 x i16> %data, <vscale x 32 x i1> %mask, <vscale x 32 x i16> %passthru) 281 ret <vscale x 32 x i16> %ret 282} 283 284; Vector compress for i32 type 285 286define <vscale x 1 x i32> @vector_compress_nxv1i32(<vscale x 1 x i32> %data, <vscale x 1 x i1> %mask) { 287; CHECK-LABEL: vector_compress_nxv1i32: 288; CHECK: # %bb.0: 289; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 290; CHECK-NEXT: vcompress.vm v9, v8, v0 291; CHECK-NEXT: vmv1r.v v8, v9 292; CHECK-NEXT: ret 293 %ret = call <vscale x 1 x i32> @llvm.experimental.vector.compress.nxv1i32(<vscale x 1 x i32> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i32> undef) 294 ret <vscale x 1 x i32> %ret 295} 296 297define <vscale x 1 x i32> @vector_compress_nxv1i32_passthru(<vscale x 1 x i32> %passthru, <vscale x 1 x i32> %data, <vscale x 1 x i1> %mask) { 298; CHECK-LABEL: vector_compress_nxv1i32_passthru: 299; CHECK: # %bb.0: 300; CHECK-NEXT: vsetvli a0, zero, e32, mf2, tu, ma 301; CHECK-NEXT: vcompress.vm v8, v9, v0 302; CHECK-NEXT: ret 303 %ret = call <vscale x 1 x i32> @llvm.experimental.vector.compress.nxv1i32(<vscale x 1 x i32> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i32> %passthru) 304 ret <vscale x 1 x i32> %ret 305} 306 307define <vscale x 2 x i32> @vector_compress_nxv2i32(<vscale x 2 x i32> %data, <vscale x 2 x i1> %mask) { 308; CHECK-LABEL: vector_compress_nxv2i32: 309; CHECK: # %bb.0: 310; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 311; CHECK-NEXT: vcompress.vm v9, v8, v0 312; CHECK-NEXT: vmv.v.v v8, v9 313; CHECK-NEXT: ret 314 %ret = call <vscale x 2 x i32> @llvm.experimental.vector.compress.nxv2i32(<vscale x 2 x i32> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i32> undef) 315 ret <vscale x 2 x i32> %ret 316} 317 318define <vscale x 2 x i32> @vector_compress_nxv2i32_passthru(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %data, <vscale x 2 x i1> %mask) { 319; CHECK-LABEL: vector_compress_nxv2i32_passthru: 320; CHECK: # %bb.0: 321; CHECK-NEXT: vsetvli a0, zero, e32, m1, tu, ma 322; CHECK-NEXT: vcompress.vm v8, v9, v0 323; CHECK-NEXT: ret 324 %ret = call <vscale x 2 x i32> @llvm.experimental.vector.compress.nxv2i32(<vscale x 2 x i32> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i32> %passthru) 325 ret <vscale x 2 x i32> %ret 326} 327 328define <vscale x 4 x i32> @vector_compress_nxv4i32(<vscale x 4 x i32> %data, <vscale x 4 x i1> %mask) { 329; CHECK-LABEL: vector_compress_nxv4i32: 330; CHECK: # %bb.0: 331; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 332; CHECK-NEXT: vcompress.vm v10, v8, v0 333; CHECK-NEXT: vmv.v.v v8, v10 334; CHECK-NEXT: ret 335 %ret = call <vscale x 4 x i32> @llvm.experimental.vector.compress.nxv4i32(<vscale x 4 x i32> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i32> undef) 336 ret <vscale x 4 x i32> %ret 337} 338 339define <vscale x 4 x i32> @vector_compress_nxv4i32_passthru(<vscale x 4 x i32> %passthru, <vscale x 4 x i32> %data, <vscale x 4 x i1> %mask) { 340; CHECK-LABEL: vector_compress_nxv4i32_passthru: 341; CHECK: # %bb.0: 342; CHECK-NEXT: vsetvli a0, zero, e32, m2, tu, ma 343; CHECK-NEXT: vcompress.vm v8, v10, v0 344; CHECK-NEXT: ret 345 %ret = call <vscale x 4 x i32> @llvm.experimental.vector.compress.nxv4i32(<vscale x 4 x i32> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i32> %passthru) 346 ret <vscale x 4 x i32> %ret 347} 348 349define <vscale x 8 x i32> @vector_compress_nxv8i32(<vscale x 8 x i32> %data, <vscale x 8 x i1> %mask) { 350; CHECK-LABEL: vector_compress_nxv8i32: 351; CHECK: # %bb.0: 352; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 353; CHECK-NEXT: vcompress.vm v12, v8, v0 354; CHECK-NEXT: vmv.v.v v8, v12 355; CHECK-NEXT: ret 356 %ret = call <vscale x 8 x i32> @llvm.experimental.vector.compress.nxv8i32(<vscale x 8 x i32> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i32> undef) 357 ret <vscale x 8 x i32> %ret 358} 359 360define <vscale x 8 x i32> @vector_compress_nxv8i32_passthru(<vscale x 8 x i32> %passthru, <vscale x 8 x i32> %data, <vscale x 8 x i1> %mask) { 361; CHECK-LABEL: vector_compress_nxv8i32_passthru: 362; CHECK: # %bb.0: 363; CHECK-NEXT: vsetvli a0, zero, e32, m4, tu, ma 364; CHECK-NEXT: vcompress.vm v8, v12, v0 365; CHECK-NEXT: ret 366 %ret = call <vscale x 8 x i32> @llvm.experimental.vector.compress.nxv8i32(<vscale x 8 x i32> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i32> %passthru) 367 ret <vscale x 8 x i32> %ret 368} 369 370define <vscale x 16 x i32> @vector_compress_nxv16i32(<vscale x 16 x i32> %data, <vscale x 16 x i1> %mask) { 371; CHECK-LABEL: vector_compress_nxv16i32: 372; CHECK: # %bb.0: 373; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 374; CHECK-NEXT: vcompress.vm v16, v8, v0 375; CHECK-NEXT: vmv.v.v v8, v16 376; CHECK-NEXT: ret 377 %ret = call <vscale x 16 x i32> @llvm.experimental.vector.compress.nxv16i32(<vscale x 16 x i32> %data, <vscale x 16 x i1> %mask, <vscale x 16 x i32> undef) 378 ret <vscale x 16 x i32> %ret 379} 380 381define <vscale x 16 x i32> @vector_compress_nxv16i32_passthru(<vscale x 16 x i32> %passthru, <vscale x 16 x i32> %data, <vscale x 16 x i1> %mask) { 382; CHECK-LABEL: vector_compress_nxv16i32_passthru: 383; CHECK: # %bb.0: 384; CHECK-NEXT: vsetvli a0, zero, e32, m8, tu, ma 385; CHECK-NEXT: vcompress.vm v8, v16, v0 386; CHECK-NEXT: ret 387 %ret = call <vscale x 16 x i32> @llvm.experimental.vector.compress.nxv16i32(<vscale x 16 x i32> %data, <vscale x 16 x i1> %mask, <vscale x 16 x i32> %passthru) 388 ret <vscale x 16 x i32> %ret 389} 390 391; Vector compress for i64 type 392 393define <vscale x 1 x i64> @vector_compress_nxv1i64(<vscale x 1 x i64> %data, <vscale x 1 x i1> %mask) { 394; CHECK-LABEL: vector_compress_nxv1i64: 395; CHECK: # %bb.0: 396; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 397; CHECK-NEXT: vcompress.vm v9, v8, v0 398; CHECK-NEXT: vmv.v.v v8, v9 399; CHECK-NEXT: ret 400 %ret = call <vscale x 1 x i64> @llvm.experimental.vector.compress.nxv1i64(<vscale x 1 x i64> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i64> undef) 401 ret <vscale x 1 x i64> %ret 402} 403 404define <vscale x 1 x i64> @vector_compress_nxv1i64_passthru(<vscale x 1 x i64> %passthru, <vscale x 1 x i64> %data, <vscale x 1 x i1> %mask) { 405; CHECK-LABEL: vector_compress_nxv1i64_passthru: 406; CHECK: # %bb.0: 407; CHECK-NEXT: vsetvli a0, zero, e64, m1, tu, ma 408; CHECK-NEXT: vcompress.vm v8, v9, v0 409; CHECK-NEXT: ret 410 %ret = call <vscale x 1 x i64> @llvm.experimental.vector.compress.nxv1i64(<vscale x 1 x i64> %data, <vscale x 1 x i1> %mask, <vscale x 1 x i64> %passthru) 411 ret <vscale x 1 x i64> %ret 412} 413 414define <vscale x 2 x i64> @vector_compress_nxv2i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %mask) { 415; CHECK-LABEL: vector_compress_nxv2i64: 416; CHECK: # %bb.0: 417; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 418; CHECK-NEXT: vcompress.vm v10, v8, v0 419; CHECK-NEXT: vmv.v.v v8, v10 420; CHECK-NEXT: ret 421 %ret = call <vscale x 2 x i64> @llvm.experimental.vector.compress.nxv2i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i64> undef) 422 ret <vscale x 2 x i64> %ret 423} 424 425define <vscale x 2 x i64> @vector_compress_nxv2i64_passthru(<vscale x 2 x i64> %passthru, <vscale x 2 x i64> %data, <vscale x 2 x i1> %mask) { 426; CHECK-LABEL: vector_compress_nxv2i64_passthru: 427; CHECK: # %bb.0: 428; CHECK-NEXT: vsetvli a0, zero, e64, m2, tu, ma 429; CHECK-NEXT: vcompress.vm v8, v10, v0 430; CHECK-NEXT: ret 431 %ret = call <vscale x 2 x i64> @llvm.experimental.vector.compress.nxv2i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %mask, <vscale x 2 x i64> %passthru) 432 ret <vscale x 2 x i64> %ret 433} 434 435define <vscale x 4 x i64> @vector_compress_nxv4i64(<vscale x 4 x i64> %data, <vscale x 4 x i1> %mask) { 436; CHECK-LABEL: vector_compress_nxv4i64: 437; CHECK: # %bb.0: 438; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 439; CHECK-NEXT: vcompress.vm v12, v8, v0 440; CHECK-NEXT: vmv.v.v v8, v12 441; CHECK-NEXT: ret 442 %ret = call <vscale x 4 x i64> @llvm.experimental.vector.compress.nxv4i64(<vscale x 4 x i64> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i64> undef) 443 ret <vscale x 4 x i64> %ret 444} 445 446define <vscale x 4 x i64> @vector_compress_nxv4i64_passthru(<vscale x 4 x i64> %passthru, <vscale x 4 x i64> %data, <vscale x 4 x i1> %mask) { 447; CHECK-LABEL: vector_compress_nxv4i64_passthru: 448; CHECK: # %bb.0: 449; CHECK-NEXT: vsetvli a0, zero, e64, m4, tu, ma 450; CHECK-NEXT: vcompress.vm v8, v12, v0 451; CHECK-NEXT: ret 452 %ret = call <vscale x 4 x i64> @llvm.experimental.vector.compress.nxv4i64(<vscale x 4 x i64> %data, <vscale x 4 x i1> %mask, <vscale x 4 x i64> %passthru) 453 ret <vscale x 4 x i64> %ret 454} 455 456define <vscale x 8 x i64> @vector_compress_nxv8i64(<vscale x 8 x i64> %data, <vscale x 8 x i1> %mask) { 457; CHECK-LABEL: vector_compress_nxv8i64: 458; CHECK: # %bb.0: 459; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 460; CHECK-NEXT: vcompress.vm v16, v8, v0 461; CHECK-NEXT: vmv.v.v v8, v16 462; CHECK-NEXT: ret 463 %ret = call <vscale x 8 x i64> @llvm.experimental.vector.compress.nxv8i64(<vscale x 8 x i64> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i64> undef) 464 ret <vscale x 8 x i64> %ret 465} 466 467define <vscale x 8 x i64> @vector_compress_nxv8i64_passthru(<vscale x 8 x i64> %passthru, <vscale x 8 x i64> %data, <vscale x 8 x i1> %mask) { 468; CHECK-LABEL: vector_compress_nxv8i64_passthru: 469; CHECK: # %bb.0: 470; CHECK-NEXT: vsetvli a0, zero, e64, m8, tu, ma 471; CHECK-NEXT: vcompress.vm v8, v16, v0 472; CHECK-NEXT: ret 473 %ret = call <vscale x 8 x i64> @llvm.experimental.vector.compress.nxv8i64(<vscale x 8 x i64> %data, <vscale x 8 x i1> %mask, <vscale x 8 x i64> %passthru) 474 ret <vscale x 8 x i64> %ret 475} 476 477; Vector compress for bf16 type 478 479define <vscale x 1 x bfloat> @vector_compress_nxv1bf16(<vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask) { 480; CHECK-LABEL: vector_compress_nxv1bf16: 481; CHECK: # %bb.0: 482; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 483; CHECK-NEXT: vcompress.vm v9, v8, v0 484; CHECK-NEXT: vmv1r.v v8, v9 485; CHECK-NEXT: ret 486 %ret = call <vscale x 1 x bfloat> @llvm.experimental.vector.compress.nxv1bf16(<vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask, <vscale x 1 x bfloat> undef) 487 ret <vscale x 1 x bfloat> %ret 488} 489 490define <vscale x 1 x bfloat> @vector_compress_nxv1bf16_passthru(<vscale x 1 x bfloat> %passthru, <vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask) { 491; CHECK-LABEL: vector_compress_nxv1bf16_passthru: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli a0, zero, e16, mf4, tu, ma 494; CHECK-NEXT: vcompress.vm v8, v9, v0 495; CHECK-NEXT: ret 496 %ret = call <vscale x 1 x bfloat> @llvm.experimental.vector.compress.nxv1bf16(<vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask, <vscale x 1 x bfloat> %passthru) 497 ret <vscale x 1 x bfloat> %ret 498} 499 500define <vscale x 2 x bfloat> @vector_compress_nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask) { 501; CHECK-LABEL: vector_compress_nxv2bf16: 502; CHECK: # %bb.0: 503; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 504; CHECK-NEXT: vcompress.vm v9, v8, v0 505; CHECK-NEXT: vmv1r.v v8, v9 506; CHECK-NEXT: ret 507 %ret = call <vscale x 2 x bfloat> @llvm.experimental.vector.compress.nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask, <vscale x 2 x bfloat> undef) 508 ret <vscale x 2 x bfloat> %ret 509} 510 511define <vscale x 2 x bfloat> @vector_compress_nxv2bf16_passthru(<vscale x 2 x bfloat> %passthru, <vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask) { 512; CHECK-LABEL: vector_compress_nxv2bf16_passthru: 513; CHECK: # %bb.0: 514; CHECK-NEXT: vsetvli a0, zero, e16, mf2, tu, ma 515; CHECK-NEXT: vcompress.vm v8, v9, v0 516; CHECK-NEXT: ret 517 %ret = call <vscale x 2 x bfloat> @llvm.experimental.vector.compress.nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask, <vscale x 2 x bfloat> %passthru) 518 ret <vscale x 2 x bfloat> %ret 519} 520 521define <vscale x 4 x bfloat> @vector_compress_nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask) { 522; CHECK-LABEL: vector_compress_nxv4bf16: 523; CHECK: # %bb.0: 524; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 525; CHECK-NEXT: vcompress.vm v9, v8, v0 526; CHECK-NEXT: vmv.v.v v8, v9 527; CHECK-NEXT: ret 528 %ret = call <vscale x 4 x bfloat> @llvm.experimental.vector.compress.nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask, <vscale x 4 x bfloat> undef) 529 ret <vscale x 4 x bfloat> %ret 530} 531 532define <vscale x 4 x bfloat> @vector_compress_nxv4bf16_passthru(<vscale x 4 x bfloat> %passthru, <vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask) { 533; CHECK-LABEL: vector_compress_nxv4bf16_passthru: 534; CHECK: # %bb.0: 535; CHECK-NEXT: vsetvli a0, zero, e16, m1, tu, ma 536; CHECK-NEXT: vcompress.vm v8, v9, v0 537; CHECK-NEXT: ret 538 %ret = call <vscale x 4 x bfloat> @llvm.experimental.vector.compress.nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask, <vscale x 4 x bfloat> %passthru) 539 ret <vscale x 4 x bfloat> %ret 540} 541 542define <vscale x 8 x bfloat> @vector_compress_nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask) { 543; CHECK-LABEL: vector_compress_nxv8bf16: 544; CHECK: # %bb.0: 545; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 546; CHECK-NEXT: vcompress.vm v10, v8, v0 547; CHECK-NEXT: vmv.v.v v8, v10 548; CHECK-NEXT: ret 549 %ret = call <vscale x 8 x bfloat> @llvm.experimental.vector.compress.nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask, <vscale x 8 x bfloat> undef) 550 ret <vscale x 8 x bfloat> %ret 551} 552 553define <vscale x 8 x bfloat> @vector_compress_nxv8bf16_passthru(<vscale x 8 x bfloat> %passthru, <vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask) { 554; CHECK-LABEL: vector_compress_nxv8bf16_passthru: 555; CHECK: # %bb.0: 556; CHECK-NEXT: vsetvli a0, zero, e16, m2, tu, ma 557; CHECK-NEXT: vcompress.vm v8, v10, v0 558; CHECK-NEXT: ret 559 %ret = call <vscale x 8 x bfloat> @llvm.experimental.vector.compress.nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask, <vscale x 8 x bfloat> %passthru) 560 ret <vscale x 8 x bfloat> %ret 561} 562 563define <vscale x 16 x bfloat> @vector_compress_nxv16bf16(<vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask) { 564; CHECK-LABEL: vector_compress_nxv16bf16: 565; CHECK: # %bb.0: 566; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 567; CHECK-NEXT: vcompress.vm v12, v8, v0 568; CHECK-NEXT: vmv.v.v v8, v12 569; CHECK-NEXT: ret 570 %ret = call <vscale x 16 x bfloat> @llvm.experimental.vector.compress.nxv16bf16(<vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask, <vscale x 16 x bfloat> undef) 571 ret <vscale x 16 x bfloat> %ret 572} 573 574define <vscale x 16 x bfloat> @vector_compress_nxv16bf16_passthru(<vscale x 16 x bfloat> %passthru, <vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask) { 575; CHECK-LABEL: vector_compress_nxv16bf16_passthru: 576; CHECK: # %bb.0: 577; CHECK-NEXT: vsetvli a0, zero, e16, m4, tu, ma 578; CHECK-NEXT: vcompress.vm v8, v12, v0 579; CHECK-NEXT: ret 580 %ret = call <vscale x 16 x bfloat> @llvm.experimental.vector.compress.nxv16bf16(<vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask, <vscale x 16 x bfloat> %passthru) 581 ret <vscale x 16 x bfloat> %ret 582} 583 584define <vscale x 32 x bfloat> @vector_compress_nxv32bf16(<vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask) { 585; CHECK-LABEL: vector_compress_nxv32bf16: 586; CHECK: # %bb.0: 587; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 588; CHECK-NEXT: vcompress.vm v16, v8, v0 589; CHECK-NEXT: vmv.v.v v8, v16 590; CHECK-NEXT: ret 591 %ret = call <vscale x 32 x bfloat> @llvm.experimental.vector.compress.nxv32bf16(<vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask, <vscale x 32 x bfloat> undef) 592 ret <vscale x 32 x bfloat> %ret 593} 594 595define <vscale x 32 x bfloat> @vector_compress_nxv32bf16_passthru(<vscale x 32 x bfloat> %passthru, <vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask) { 596; CHECK-LABEL: vector_compress_nxv32bf16_passthru: 597; CHECK: # %bb.0: 598; CHECK-NEXT: vsetvli a0, zero, e16, m8, tu, ma 599; CHECK-NEXT: vcompress.vm v8, v16, v0 600; CHECK-NEXT: ret 601 %ret = call <vscale x 32 x bfloat> @llvm.experimental.vector.compress.nxv32bf16(<vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask, <vscale x 32 x bfloat> %passthru) 602 ret <vscale x 32 x bfloat> %ret 603} 604 605; Vector compress for f16 type 606 607define <vscale x 1 x half> @vector_compress_nxv1f16(<vscale x 1 x half> %data, <vscale x 1 x i1> %mask) { 608; CHECK-LABEL: vector_compress_nxv1f16: 609; CHECK: # %bb.0: 610; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 611; CHECK-NEXT: vcompress.vm v9, v8, v0 612; CHECK-NEXT: vmv1r.v v8, v9 613; CHECK-NEXT: ret 614 %ret = call <vscale x 1 x half> @llvm.experimental.vector.compress.nxv1f16(<vscale x 1 x half> %data, <vscale x 1 x i1> %mask, <vscale x 1 x half> undef) 615 ret <vscale x 1 x half> %ret 616} 617 618define <vscale x 1 x half> @vector_compress_nxv1f16_passthru(<vscale x 1 x half> %passthru, <vscale x 1 x half> %data, <vscale x 1 x i1> %mask) { 619; CHECK-LABEL: vector_compress_nxv1f16_passthru: 620; CHECK: # %bb.0: 621; CHECK-NEXT: vsetvli a0, zero, e16, mf4, tu, ma 622; CHECK-NEXT: vcompress.vm v8, v9, v0 623; CHECK-NEXT: ret 624 %ret = call <vscale x 1 x half> @llvm.experimental.vector.compress.nxv1f16(<vscale x 1 x half> %data, <vscale x 1 x i1> %mask, <vscale x 1 x half> %passthru) 625 ret <vscale x 1 x half> %ret 626} 627 628define <vscale x 2 x half> @vector_compress_nxv2f16(<vscale x 2 x half> %data, <vscale x 2 x i1> %mask) { 629; CHECK-LABEL: vector_compress_nxv2f16: 630; CHECK: # %bb.0: 631; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 632; CHECK-NEXT: vcompress.vm v9, v8, v0 633; CHECK-NEXT: vmv1r.v v8, v9 634; CHECK-NEXT: ret 635 %ret = call <vscale x 2 x half> @llvm.experimental.vector.compress.nxv2f16(<vscale x 2 x half> %data, <vscale x 2 x i1> %mask, <vscale x 2 x half> undef) 636 ret <vscale x 2 x half> %ret 637} 638 639define <vscale x 2 x half> @vector_compress_nxv2f16_passthru(<vscale x 2 x half> %passthru, <vscale x 2 x half> %data, <vscale x 2 x i1> %mask) { 640; CHECK-LABEL: vector_compress_nxv2f16_passthru: 641; CHECK: # %bb.0: 642; CHECK-NEXT: vsetvli a0, zero, e16, mf2, tu, ma 643; CHECK-NEXT: vcompress.vm v8, v9, v0 644; CHECK-NEXT: ret 645 %ret = call <vscale x 2 x half> @llvm.experimental.vector.compress.nxv2f16(<vscale x 2 x half> %data, <vscale x 2 x i1> %mask, <vscale x 2 x half> %passthru) 646 ret <vscale x 2 x half> %ret 647} 648 649define <vscale x 4 x half> @vector_compress_nxv4f16(<vscale x 4 x half> %data, <vscale x 4 x i1> %mask) { 650; CHECK-LABEL: vector_compress_nxv4f16: 651; CHECK: # %bb.0: 652; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 653; CHECK-NEXT: vcompress.vm v9, v8, v0 654; CHECK-NEXT: vmv.v.v v8, v9 655; CHECK-NEXT: ret 656 %ret = call <vscale x 4 x half> @llvm.experimental.vector.compress.nxv4f16(<vscale x 4 x half> %data, <vscale x 4 x i1> %mask, <vscale x 4 x half> undef) 657 ret <vscale x 4 x half> %ret 658} 659 660define <vscale x 4 x half> @vector_compress_nxv4f16_passthru(<vscale x 4 x half> %passthru, <vscale x 4 x half> %data, <vscale x 4 x i1> %mask) { 661; CHECK-LABEL: vector_compress_nxv4f16_passthru: 662; CHECK: # %bb.0: 663; CHECK-NEXT: vsetvli a0, zero, e16, m1, tu, ma 664; CHECK-NEXT: vcompress.vm v8, v9, v0 665; CHECK-NEXT: ret 666 %ret = call <vscale x 4 x half> @llvm.experimental.vector.compress.nxv4f16(<vscale x 4 x half> %data, <vscale x 4 x i1> %mask, <vscale x 4 x half> %passthru) 667 ret <vscale x 4 x half> %ret 668} 669 670define <vscale x 8 x half> @vector_compress_nxv8f16(<vscale x 8 x half> %data, <vscale x 8 x i1> %mask) { 671; CHECK-LABEL: vector_compress_nxv8f16: 672; CHECK: # %bb.0: 673; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 674; CHECK-NEXT: vcompress.vm v10, v8, v0 675; CHECK-NEXT: vmv.v.v v8, v10 676; CHECK-NEXT: ret 677 %ret = call <vscale x 8 x half> @llvm.experimental.vector.compress.nxv8f16(<vscale x 8 x half> %data, <vscale x 8 x i1> %mask, <vscale x 8 x half> undef) 678 ret <vscale x 8 x half> %ret 679} 680 681define <vscale x 8 x half> @vector_compress_nxv8f16_passthru(<vscale x 8 x half> %passthru, <vscale x 8 x half> %data, <vscale x 8 x i1> %mask) { 682; CHECK-LABEL: vector_compress_nxv8f16_passthru: 683; CHECK: # %bb.0: 684; CHECK-NEXT: vsetvli a0, zero, e16, m2, tu, ma 685; CHECK-NEXT: vcompress.vm v8, v10, v0 686; CHECK-NEXT: ret 687 %ret = call <vscale x 8 x half> @llvm.experimental.vector.compress.nxv8f16(<vscale x 8 x half> %data, <vscale x 8 x i1> %mask, <vscale x 8 x half> %passthru) 688 ret <vscale x 8 x half> %ret 689} 690 691define <vscale x 16 x half> @vector_compress_nxv16f16(<vscale x 16 x half> %data, <vscale x 16 x i1> %mask) { 692; CHECK-LABEL: vector_compress_nxv16f16: 693; CHECK: # %bb.0: 694; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 695; CHECK-NEXT: vcompress.vm v12, v8, v0 696; CHECK-NEXT: vmv.v.v v8, v12 697; CHECK-NEXT: ret 698 %ret = call <vscale x 16 x half> @llvm.experimental.vector.compress.nxv16f16(<vscale x 16 x half> %data, <vscale x 16 x i1> %mask, <vscale x 16 x half> undef) 699 ret <vscale x 16 x half> %ret 700} 701 702define <vscale x 16 x half> @vector_compress_nxv16f16_passthru(<vscale x 16 x half> %passthru, <vscale x 16 x half> %data, <vscale x 16 x i1> %mask) { 703; CHECK-LABEL: vector_compress_nxv16f16_passthru: 704; CHECK: # %bb.0: 705; CHECK-NEXT: vsetvli a0, zero, e16, m4, tu, ma 706; CHECK-NEXT: vcompress.vm v8, v12, v0 707; CHECK-NEXT: ret 708 %ret = call <vscale x 16 x half> @llvm.experimental.vector.compress.nxv16f16(<vscale x 16 x half> %data, <vscale x 16 x i1> %mask, <vscale x 16 x half> %passthru) 709 ret <vscale x 16 x half> %ret 710} 711 712define <vscale x 32 x half> @vector_compress_nxv32f16(<vscale x 32 x half> %data, <vscale x 32 x i1> %mask) { 713; CHECK-LABEL: vector_compress_nxv32f16: 714; CHECK: # %bb.0: 715; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 716; CHECK-NEXT: vcompress.vm v16, v8, v0 717; CHECK-NEXT: vmv.v.v v8, v16 718; CHECK-NEXT: ret 719 %ret = call <vscale x 32 x half> @llvm.experimental.vector.compress.nxv32f16(<vscale x 32 x half> %data, <vscale x 32 x i1> %mask, <vscale x 32 x half> undef) 720 ret <vscale x 32 x half> %ret 721} 722 723define <vscale x 32 x half> @vector_compress_nxv32f16_passthru(<vscale x 32 x half> %passthru, <vscale x 32 x half> %data, <vscale x 32 x i1> %mask) { 724; CHECK-LABEL: vector_compress_nxv32f16_passthru: 725; CHECK: # %bb.0: 726; CHECK-NEXT: vsetvli a0, zero, e16, m8, tu, ma 727; CHECK-NEXT: vcompress.vm v8, v16, v0 728; CHECK-NEXT: ret 729 %ret = call <vscale x 32 x half> @llvm.experimental.vector.compress.nxv32f16(<vscale x 32 x half> %data, <vscale x 32 x i1> %mask, <vscale x 32 x half> %passthru) 730 ret <vscale x 32 x half> %ret 731} 732 733; Vector compress for f32 type 734 735define <vscale x 1 x float> @vector_compress_nxv1f32(<vscale x 1 x float> %data, <vscale x 1 x i1> %mask) { 736; CHECK-LABEL: vector_compress_nxv1f32: 737; CHECK: # %bb.0: 738; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 739; CHECK-NEXT: vcompress.vm v9, v8, v0 740; CHECK-NEXT: vmv1r.v v8, v9 741; CHECK-NEXT: ret 742 %ret = call <vscale x 1 x float> @llvm.experimental.vector.compress.nxv1f32(<vscale x 1 x float> %data, <vscale x 1 x i1> %mask, <vscale x 1 x float> undef) 743 ret <vscale x 1 x float> %ret 744} 745 746define <vscale x 1 x float> @vector_compress_nxv1f32_passthru(<vscale x 1 x float> %passthru, <vscale x 1 x float> %data, <vscale x 1 x i1> %mask) { 747; CHECK-LABEL: vector_compress_nxv1f32_passthru: 748; CHECK: # %bb.0: 749; CHECK-NEXT: vsetvli a0, zero, e32, mf2, tu, ma 750; CHECK-NEXT: vcompress.vm v8, v9, v0 751; CHECK-NEXT: ret 752 %ret = call <vscale x 1 x float> @llvm.experimental.vector.compress.nxv1f32(<vscale x 1 x float> %data, <vscale x 1 x i1> %mask, <vscale x 1 x float> %passthru) 753 ret <vscale x 1 x float> %ret 754} 755 756define <vscale x 2 x float> @vector_compress_nxv2f32(<vscale x 2 x float> %data, <vscale x 2 x i1> %mask) { 757; CHECK-LABEL: vector_compress_nxv2f32: 758; CHECK: # %bb.0: 759; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 760; CHECK-NEXT: vcompress.vm v9, v8, v0 761; CHECK-NEXT: vmv.v.v v8, v9 762; CHECK-NEXT: ret 763 %ret = call <vscale x 2 x float> @llvm.experimental.vector.compress.nxv2f32(<vscale x 2 x float> %data, <vscale x 2 x i1> %mask, <vscale x 2 x float> undef) 764 ret <vscale x 2 x float> %ret 765} 766 767define <vscale x 2 x float> @vector_compress_nxv2f32_passthru(<vscale x 2 x float> %passthru, <vscale x 2 x float> %data, <vscale x 2 x i1> %mask) { 768; CHECK-LABEL: vector_compress_nxv2f32_passthru: 769; CHECK: # %bb.0: 770; CHECK-NEXT: vsetvli a0, zero, e32, m1, tu, ma 771; CHECK-NEXT: vcompress.vm v8, v9, v0 772; CHECK-NEXT: ret 773 %ret = call <vscale x 2 x float> @llvm.experimental.vector.compress.nxv2f32(<vscale x 2 x float> %data, <vscale x 2 x i1> %mask, <vscale x 2 x float> %passthru) 774 ret <vscale x 2 x float> %ret 775} 776 777define <vscale x 4 x float> @vector_compress_nxv4f32(<vscale x 4 x float> %data, <vscale x 4 x i1> %mask) { 778; CHECK-LABEL: vector_compress_nxv4f32: 779; CHECK: # %bb.0: 780; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 781; CHECK-NEXT: vcompress.vm v10, v8, v0 782; CHECK-NEXT: vmv.v.v v8, v10 783; CHECK-NEXT: ret 784 %ret = call <vscale x 4 x float> @llvm.experimental.vector.compress.nxv4f32(<vscale x 4 x float> %data, <vscale x 4 x i1> %mask, <vscale x 4 x float> undef) 785 ret <vscale x 4 x float> %ret 786} 787 788define <vscale x 4 x float> @vector_compress_nxv4f32_passthru(<vscale x 4 x float> %passthru, <vscale x 4 x float> %data, <vscale x 4 x i1> %mask) { 789; CHECK-LABEL: vector_compress_nxv4f32_passthru: 790; CHECK: # %bb.0: 791; CHECK-NEXT: vsetvli a0, zero, e32, m2, tu, ma 792; CHECK-NEXT: vcompress.vm v8, v10, v0 793; CHECK-NEXT: ret 794 %ret = call <vscale x 4 x float> @llvm.experimental.vector.compress.nxv4f32(<vscale x 4 x float> %data, <vscale x 4 x i1> %mask, <vscale x 4 x float> %passthru) 795 ret <vscale x 4 x float> %ret 796} 797 798define <vscale x 8 x float> @vector_compress_nxv8f32(<vscale x 8 x float> %data, <vscale x 8 x i1> %mask) { 799; CHECK-LABEL: vector_compress_nxv8f32: 800; CHECK: # %bb.0: 801; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 802; CHECK-NEXT: vcompress.vm v12, v8, v0 803; CHECK-NEXT: vmv.v.v v8, v12 804; CHECK-NEXT: ret 805 %ret = call <vscale x 8 x float> @llvm.experimental.vector.compress.nxv8f32(<vscale x 8 x float> %data, <vscale x 8 x i1> %mask, <vscale x 8 x float> undef) 806 ret <vscale x 8 x float> %ret 807} 808 809define <vscale x 8 x float> @vector_compress_nxv8f32_passthru(<vscale x 8 x float> %passthru, <vscale x 8 x float> %data, <vscale x 8 x i1> %mask) { 810; CHECK-LABEL: vector_compress_nxv8f32_passthru: 811; CHECK: # %bb.0: 812; CHECK-NEXT: vsetvli a0, zero, e32, m4, tu, ma 813; CHECK-NEXT: vcompress.vm v8, v12, v0 814; CHECK-NEXT: ret 815 %ret = call <vscale x 8 x float> @llvm.experimental.vector.compress.nxv8f32(<vscale x 8 x float> %data, <vscale x 8 x i1> %mask, <vscale x 8 x float> %passthru) 816 ret <vscale x 8 x float> %ret 817} 818 819define <vscale x 16 x float> @vector_compress_nxv16f32(<vscale x 16 x float> %data, <vscale x 16 x i1> %mask) { 820; CHECK-LABEL: vector_compress_nxv16f32: 821; CHECK: # %bb.0: 822; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 823; CHECK-NEXT: vcompress.vm v16, v8, v0 824; CHECK-NEXT: vmv.v.v v8, v16 825; CHECK-NEXT: ret 826 %ret = call <vscale x 16 x float> @llvm.experimental.vector.compress.nxv16f32(<vscale x 16 x float> %data, <vscale x 16 x i1> %mask, <vscale x 16 x float> undef) 827 ret <vscale x 16 x float> %ret 828} 829 830define <vscale x 16 x float> @vector_compress_nxv16f32_passthru(<vscale x 16 x float> %passthru, <vscale x 16 x float> %data, <vscale x 16 x i1> %mask) { 831; CHECK-LABEL: vector_compress_nxv16f32_passthru: 832; CHECK: # %bb.0: 833; CHECK-NEXT: vsetvli a0, zero, e32, m8, tu, ma 834; CHECK-NEXT: vcompress.vm v8, v16, v0 835; CHECK-NEXT: ret 836 %ret = call <vscale x 16 x float> @llvm.experimental.vector.compress.nxv16f32(<vscale x 16 x float> %data, <vscale x 16 x i1> %mask, <vscale x 16 x float> %passthru) 837 ret <vscale x 16 x float> %ret 838} 839 840; Vector compress for f64 type 841 842define <vscale x 1 x double> @vector_compress_nxv1f64(<vscale x 1 x double> %data, <vscale x 1 x i1> %mask) { 843; CHECK-LABEL: vector_compress_nxv1f64: 844; CHECK: # %bb.0: 845; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 846; CHECK-NEXT: vcompress.vm v9, v8, v0 847; CHECK-NEXT: vmv.v.v v8, v9 848; CHECK-NEXT: ret 849 %ret = call <vscale x 1 x double> @llvm.experimental.vector.compress.nxv1f64(<vscale x 1 x double> %data, <vscale x 1 x i1> %mask, <vscale x 1 x double> undef) 850 ret <vscale x 1 x double> %ret 851} 852 853define <vscale x 1 x double> @vector_compress_nxv1f64_passthru(<vscale x 1 x double> %passthru, <vscale x 1 x double> %data, <vscale x 1 x i1> %mask) { 854; CHECK-LABEL: vector_compress_nxv1f64_passthru: 855; CHECK: # %bb.0: 856; CHECK-NEXT: vsetvli a0, zero, e64, m1, tu, ma 857; CHECK-NEXT: vcompress.vm v8, v9, v0 858; CHECK-NEXT: ret 859 %ret = call <vscale x 1 x double> @llvm.experimental.vector.compress.nxv1f64(<vscale x 1 x double> %data, <vscale x 1 x i1> %mask, <vscale x 1 x double> %passthru) 860 ret <vscale x 1 x double> %ret 861} 862 863define <vscale x 2 x double> @vector_compress_nxv2f64(<vscale x 2 x double> %data, <vscale x 2 x i1> %mask) { 864; CHECK-LABEL: vector_compress_nxv2f64: 865; CHECK: # %bb.0: 866; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 867; CHECK-NEXT: vcompress.vm v10, v8, v0 868; CHECK-NEXT: vmv.v.v v8, v10 869; CHECK-NEXT: ret 870 %ret = call <vscale x 2 x double> @llvm.experimental.vector.compress.nxv2f64(<vscale x 2 x double> %data, <vscale x 2 x i1> %mask, <vscale x 2 x double> undef) 871 ret <vscale x 2 x double> %ret 872} 873 874define <vscale x 2 x double> @vector_compress_nxv2f64_passthru(<vscale x 2 x double> %passthru, <vscale x 2 x double> %data, <vscale x 2 x i1> %mask) { 875; CHECK-LABEL: vector_compress_nxv2f64_passthru: 876; CHECK: # %bb.0: 877; CHECK-NEXT: vsetvli a0, zero, e64, m2, tu, ma 878; CHECK-NEXT: vcompress.vm v8, v10, v0 879; CHECK-NEXT: ret 880 %ret = call <vscale x 2 x double> @llvm.experimental.vector.compress.nxv2f64(<vscale x 2 x double> %data, <vscale x 2 x i1> %mask, <vscale x 2 x double> %passthru) 881 ret <vscale x 2 x double> %ret 882} 883 884define <vscale x 4 x double> @vector_compress_nxv4f64(<vscale x 4 x double> %data, <vscale x 4 x i1> %mask) { 885; CHECK-LABEL: vector_compress_nxv4f64: 886; CHECK: # %bb.0: 887; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 888; CHECK-NEXT: vcompress.vm v12, v8, v0 889; CHECK-NEXT: vmv.v.v v8, v12 890; CHECK-NEXT: ret 891 %ret = call <vscale x 4 x double> @llvm.experimental.vector.compress.nxv4f64(<vscale x 4 x double> %data, <vscale x 4 x i1> %mask, <vscale x 4 x double> undef) 892 ret <vscale x 4 x double> %ret 893} 894 895define <vscale x 4 x double> @vector_compress_nxv4f64_passthru(<vscale x 4 x double> %passthru, <vscale x 4 x double> %data, <vscale x 4 x i1> %mask) { 896; CHECK-LABEL: vector_compress_nxv4f64_passthru: 897; CHECK: # %bb.0: 898; CHECK-NEXT: vsetvli a0, zero, e64, m4, tu, ma 899; CHECK-NEXT: vcompress.vm v8, v12, v0 900; CHECK-NEXT: ret 901 %ret = call <vscale x 4 x double> @llvm.experimental.vector.compress.nxv4f64(<vscale x 4 x double> %data, <vscale x 4 x i1> %mask, <vscale x 4 x double> %passthru) 902 ret <vscale x 4 x double> %ret 903} 904 905define <vscale x 8 x double> @vector_compress_nxv8f64(<vscale x 8 x double> %data, <vscale x 8 x i1> %mask) { 906; CHECK-LABEL: vector_compress_nxv8f64: 907; CHECK: # %bb.0: 908; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 909; CHECK-NEXT: vcompress.vm v16, v8, v0 910; CHECK-NEXT: vmv.v.v v8, v16 911; CHECK-NEXT: ret 912 %ret = call <vscale x 8 x double> @llvm.experimental.vector.compress.nxv8f64(<vscale x 8 x double> %data, <vscale x 8 x i1> %mask, <vscale x 8 x double> undef) 913 ret <vscale x 8 x double> %ret 914} 915 916define <vscale x 8 x double> @vector_compress_nxv8f64_passthru(<vscale x 8 x double> %passthru, <vscale x 8 x double> %data, <vscale x 8 x i1> %mask) { 917; CHECK-LABEL: vector_compress_nxv8f64_passthru: 918; CHECK: # %bb.0: 919; CHECK-NEXT: vsetvli a0, zero, e64, m8, tu, ma 920; CHECK-NEXT: vcompress.vm v8, v16, v0 921; CHECK-NEXT: ret 922 %ret = call <vscale x 8 x double> @llvm.experimental.vector.compress.nxv8f64(<vscale x 8 x double> %data, <vscale x 8 x i1> %mask, <vscale x 8 x double> %passthru) 923 ret <vscale x 8 x double> %ret 924} 925