958 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfh,+zvfbfmin < %s | FileCheck %s3; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfh,+zvfbfmin < %s | FileCheck %s4; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfhmin,+zvfbfmin < %s | FileCheck %s5; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfhmin,+zvfbfmin < %s | FileCheck %s6 7; Vector compress for i8 type8 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, ma13; CHECK-NEXT: vcompress.vm v9, v8, v014; CHECK-NEXT: vmv1r.v v8, v915; CHECK-NEXT: ret16 %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> poison)17 ret <vscale x 1 x i8> %ret18}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, ma24; CHECK-NEXT: vcompress.vm v8, v9, v025; CHECK-NEXT: ret26 %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> %ret28}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, ma34; CHECK-NEXT: vcompress.vm v9, v8, v035; CHECK-NEXT: vmv1r.v v8, v936; CHECK-NEXT: ret37 %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> poison)38 ret <vscale x 2 x i8> %ret39}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, ma45; CHECK-NEXT: vcompress.vm v8, v9, v046; CHECK-NEXT: ret47 %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> %ret49}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, ma55; CHECK-NEXT: vcompress.vm v9, v8, v056; CHECK-NEXT: vmv1r.v v8, v957; CHECK-NEXT: ret58 %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> poison)59 ret <vscale x 4 x i8> %ret60}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, ma66; CHECK-NEXT: vcompress.vm v8, v9, v067; CHECK-NEXT: ret68 %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> %ret70}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, ma76; CHECK-NEXT: vcompress.vm v9, v8, v077; CHECK-NEXT: vmv.v.v v8, v978; CHECK-NEXT: ret79 %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> poison)80 ret <vscale x 8 x i8> %ret81}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, ma87; CHECK-NEXT: vcompress.vm v8, v9, v088; CHECK-NEXT: ret89 %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> %ret91}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, ma97; CHECK-NEXT: vcompress.vm v10, v8, v098; CHECK-NEXT: vmv.v.v v8, v1099; CHECK-NEXT: ret100 %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> poison)101 ret <vscale x 16 x i8> %ret102}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, ma108; CHECK-NEXT: vcompress.vm v8, v10, v0109; CHECK-NEXT: ret110 %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> %ret112}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, ma118; CHECK-NEXT: vcompress.vm v12, v8, v0119; CHECK-NEXT: vmv.v.v v8, v12120; CHECK-NEXT: ret121 %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> poison)122 ret <vscale x 32 x i8> %ret123}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, ma129; CHECK-NEXT: vcompress.vm v8, v12, v0130; CHECK-NEXT: ret131 %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> %ret133}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, ma139; CHECK-NEXT: vcompress.vm v16, v8, v0140; CHECK-NEXT: vmv.v.v v8, v16141; CHECK-NEXT: ret142 %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> poison)143 ret <vscale x 64 x i8> %ret144}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, ma150; CHECK-NEXT: vcompress.vm v8, v16, v0151; CHECK-NEXT: ret152 %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> %ret154}155 156; Vector compress for i16 type157 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, ma162; CHECK-NEXT: vcompress.vm v9, v8, v0163; CHECK-NEXT: vmv1r.v v8, v9164; CHECK-NEXT: ret165 %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> poison)166 ret <vscale x 1 x i16> %ret167}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, ma173; CHECK-NEXT: vcompress.vm v8, v9, v0174; CHECK-NEXT: ret175 %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> %ret177}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, ma183; CHECK-NEXT: vcompress.vm v9, v8, v0184; CHECK-NEXT: vmv1r.v v8, v9185; CHECK-NEXT: ret186 %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> poison)187 ret <vscale x 2 x i16> %ret188}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, ma194; CHECK-NEXT: vcompress.vm v8, v9, v0195; CHECK-NEXT: ret196 %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> %ret198}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, ma204; CHECK-NEXT: vcompress.vm v9, v8, v0205; CHECK-NEXT: vmv.v.v v8, v9206; CHECK-NEXT: ret207 %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> poison)208 ret <vscale x 4 x i16> %ret209}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, ma215; CHECK-NEXT: vcompress.vm v8, v9, v0216; CHECK-NEXT: ret217 %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> %ret219}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, ma225; CHECK-NEXT: vcompress.vm v10, v8, v0226; CHECK-NEXT: vmv.v.v v8, v10227; CHECK-NEXT: ret228 %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> poison)229 ret <vscale x 8 x i16> %ret230}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, ma236; CHECK-NEXT: vcompress.vm v8, v10, v0237; CHECK-NEXT: ret238 %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> %ret240}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, ma246; CHECK-NEXT: vcompress.vm v12, v8, v0247; CHECK-NEXT: vmv.v.v v8, v12248; CHECK-NEXT: ret249 %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> poison)250 ret <vscale x 16 x i16> %ret251}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, ma257; CHECK-NEXT: vcompress.vm v8, v12, v0258; CHECK-NEXT: ret259 %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> %ret261}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, ma267; CHECK-NEXT: vcompress.vm v16, v8, v0268; CHECK-NEXT: vmv.v.v v8, v16269; CHECK-NEXT: ret270 %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> poison)271 ret <vscale x 32 x i16> %ret272}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, ma278; CHECK-NEXT: vcompress.vm v8, v16, v0279; CHECK-NEXT: ret280 %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> %ret282}283 284; Vector compress for i32 type285 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, ma290; CHECK-NEXT: vcompress.vm v9, v8, v0291; CHECK-NEXT: vmv1r.v v8, v9292; CHECK-NEXT: ret293 %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> poison)294 ret <vscale x 1 x i32> %ret295}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, ma301; CHECK-NEXT: vcompress.vm v8, v9, v0302; CHECK-NEXT: ret303 %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> %ret305}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, ma311; CHECK-NEXT: vcompress.vm v9, v8, v0312; CHECK-NEXT: vmv.v.v v8, v9313; CHECK-NEXT: ret314 %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> poison)315 ret <vscale x 2 x i32> %ret316}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, ma322; CHECK-NEXT: vcompress.vm v8, v9, v0323; CHECK-NEXT: ret324 %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> %ret326}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, ma332; CHECK-NEXT: vcompress.vm v10, v8, v0333; CHECK-NEXT: vmv.v.v v8, v10334; CHECK-NEXT: ret335 %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> poison)336 ret <vscale x 4 x i32> %ret337}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, ma343; CHECK-NEXT: vcompress.vm v8, v10, v0344; CHECK-NEXT: ret345 %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> %ret347}348 349define <vscale x 4 x i32> @test_compress_nvx8f64_knownbits(<vscale x 4 x i16> %vec, <vscale x 4 x i1> %mask, <vscale x 4 x i32> %passthru) nounwind {350; CHECK-LABEL: test_compress_nvx8f64_knownbits:351; CHECK: # %bb.0:352; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma353; CHECK-NEXT: vzext.vf2 v12, v8354; CHECK-NEXT: vand.vi v8, v10, 3355; CHECK-NEXT: vsetvli zero, zero, e32, m2, tu, ma356; CHECK-NEXT: vcompress.vm v8, v12, v0357; CHECK-NEXT: ret358 %xvec = zext <vscale x 4 x i16> %vec to <vscale x 4 x i32>359 %xpassthru = and <vscale x 4 x i32> %passthru, splat (i32 3)360 %out = call <vscale x 4 x i32> @llvm.experimental.vector.compress(<vscale x 4 x i32> %xvec, <vscale x 4 x i1> %mask, <vscale x 4 x i32> %xpassthru)361 %res = and <vscale x 4 x i32> %out, splat (i32 65535)362 ret <vscale x 4 x i32> %res363}364 365define <vscale x 4 x i32> @test_compress_nv8xf64_numsignbits(<vscale x 4 x i16> %vec, <vscale x 4 x i1> %mask, <vscale x 4 x i32> %passthru) nounwind {366; CHECK-LABEL: test_compress_nv8xf64_numsignbits:367; CHECK: # %bb.0:368; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma369; CHECK-NEXT: vsext.vf2 v12, v8370; CHECK-NEXT: vand.vi v8, v10, 3371; CHECK-NEXT: vsetvli zero, zero, e32, m2, tu, ma372; CHECK-NEXT: vcompress.vm v8, v12, v0373; CHECK-NEXT: ret374 %xvec = sext <vscale x 4 x i16> %vec to <vscale x 4 x i32>375 %xpassthru = and <vscale x 4 x i32> %passthru, splat (i32 3)376 %out = call <vscale x 4 x i32> @llvm.experimental.vector.compress(<vscale x 4 x i32> %xvec, <vscale x 4 x i1> %mask, <vscale x 4 x i32> %xpassthru)377 %shl = shl <vscale x 4 x i32> %out, splat (i32 16)378 %res = ashr <vscale x 4 x i32> %shl, splat (i32 16)379 ret <vscale x 4 x i32> %res380}381 382define <vscale x 8 x i32> @vector_compress_nxv8i32(<vscale x 8 x i32> %data, <vscale x 8 x i1> %mask) {383; CHECK-LABEL: vector_compress_nxv8i32:384; CHECK: # %bb.0:385; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma386; CHECK-NEXT: vcompress.vm v12, v8, v0387; CHECK-NEXT: vmv.v.v v8, v12388; CHECK-NEXT: ret389 %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> poison)390 ret <vscale x 8 x i32> %ret391}392 393define <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) {394; CHECK-LABEL: vector_compress_nxv8i32_passthru:395; CHECK: # %bb.0:396; CHECK-NEXT: vsetvli a0, zero, e32, m4, tu, ma397; CHECK-NEXT: vcompress.vm v8, v12, v0398; CHECK-NEXT: ret399 %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)400 ret <vscale x 8 x i32> %ret401}402 403define <vscale x 16 x i32> @vector_compress_nxv16i32(<vscale x 16 x i32> %data, <vscale x 16 x i1> %mask) {404; CHECK-LABEL: vector_compress_nxv16i32:405; CHECK: # %bb.0:406; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma407; CHECK-NEXT: vcompress.vm v16, v8, v0408; CHECK-NEXT: vmv.v.v v8, v16409; CHECK-NEXT: ret410 %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> poison)411 ret <vscale x 16 x i32> %ret412}413 414define <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) {415; CHECK-LABEL: vector_compress_nxv16i32_passthru:416; CHECK: # %bb.0:417; CHECK-NEXT: vsetvli a0, zero, e32, m8, tu, ma418; CHECK-NEXT: vcompress.vm v8, v16, v0419; CHECK-NEXT: ret420 %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)421 ret <vscale x 16 x i32> %ret422}423 424; Vector compress for i64 type425 426define <vscale x 1 x i64> @vector_compress_nxv1i64(<vscale x 1 x i64> %data, <vscale x 1 x i1> %mask) {427; CHECK-LABEL: vector_compress_nxv1i64:428; CHECK: # %bb.0:429; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma430; CHECK-NEXT: vcompress.vm v9, v8, v0431; CHECK-NEXT: vmv.v.v v8, v9432; CHECK-NEXT: ret433 %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> poison)434 ret <vscale x 1 x i64> %ret435}436 437define <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) {438; CHECK-LABEL: vector_compress_nxv1i64_passthru:439; CHECK: # %bb.0:440; CHECK-NEXT: vsetvli a0, zero, e64, m1, tu, ma441; CHECK-NEXT: vcompress.vm v8, v9, v0442; CHECK-NEXT: ret443 %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)444 ret <vscale x 1 x i64> %ret445}446 447define <vscale x 2 x i64> @vector_compress_nxv2i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %mask) {448; CHECK-LABEL: vector_compress_nxv2i64:449; CHECK: # %bb.0:450; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma451; CHECK-NEXT: vcompress.vm v10, v8, v0452; CHECK-NEXT: vmv.v.v v8, v10453; CHECK-NEXT: ret454 %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> poison)455 ret <vscale x 2 x i64> %ret456}457 458define <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) {459; CHECK-LABEL: vector_compress_nxv2i64_passthru:460; CHECK: # %bb.0:461; CHECK-NEXT: vsetvli a0, zero, e64, m2, tu, ma462; CHECK-NEXT: vcompress.vm v8, v10, v0463; CHECK-NEXT: ret464 %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)465 ret <vscale x 2 x i64> %ret466}467 468define <vscale x 4 x i64> @vector_compress_nxv4i64(<vscale x 4 x i64> %data, <vscale x 4 x i1> %mask) {469; CHECK-LABEL: vector_compress_nxv4i64:470; CHECK: # %bb.0:471; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma472; CHECK-NEXT: vcompress.vm v12, v8, v0473; CHECK-NEXT: vmv.v.v v8, v12474; CHECK-NEXT: ret475 %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> poison)476 ret <vscale x 4 x i64> %ret477}478 479define <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) {480; CHECK-LABEL: vector_compress_nxv4i64_passthru:481; CHECK: # %bb.0:482; CHECK-NEXT: vsetvli a0, zero, e64, m4, tu, ma483; CHECK-NEXT: vcompress.vm v8, v12, v0484; CHECK-NEXT: ret485 %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)486 ret <vscale x 4 x i64> %ret487}488 489define <vscale x 8 x i64> @vector_compress_nxv8i64(<vscale x 8 x i64> %data, <vscale x 8 x i1> %mask) {490; CHECK-LABEL: vector_compress_nxv8i64:491; CHECK: # %bb.0:492; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma493; CHECK-NEXT: vcompress.vm v16, v8, v0494; CHECK-NEXT: vmv.v.v v8, v16495; CHECK-NEXT: ret496 %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> poison)497 ret <vscale x 8 x i64> %ret498}499 500define <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) {501; CHECK-LABEL: vector_compress_nxv8i64_passthru:502; CHECK: # %bb.0:503; CHECK-NEXT: vsetvli a0, zero, e64, m8, tu, ma504; CHECK-NEXT: vcompress.vm v8, v16, v0505; CHECK-NEXT: ret506 %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)507 ret <vscale x 8 x i64> %ret508}509 510; Vector compress for bf16 type511 512define <vscale x 1 x bfloat> @vector_compress_nxv1bf16(<vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask) {513; CHECK-LABEL: vector_compress_nxv1bf16:514; CHECK: # %bb.0:515; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma516; CHECK-NEXT: vcompress.vm v9, v8, v0517; CHECK-NEXT: vmv1r.v v8, v9518; CHECK-NEXT: ret519 %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> poison)520 ret <vscale x 1 x bfloat> %ret521}522 523define <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) {524; CHECK-LABEL: vector_compress_nxv1bf16_passthru:525; CHECK: # %bb.0:526; CHECK-NEXT: vsetvli a0, zero, e16, mf4, tu, ma527; CHECK-NEXT: vcompress.vm v8, v9, v0528; CHECK-NEXT: ret529 %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)530 ret <vscale x 1 x bfloat> %ret531}532 533define <vscale x 2 x bfloat> @vector_compress_nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask) {534; CHECK-LABEL: vector_compress_nxv2bf16:535; CHECK: # %bb.0:536; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma537; CHECK-NEXT: vcompress.vm v9, v8, v0538; CHECK-NEXT: vmv1r.v v8, v9539; CHECK-NEXT: ret540 %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> poison)541 ret <vscale x 2 x bfloat> %ret542}543 544define <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) {545; CHECK-LABEL: vector_compress_nxv2bf16_passthru:546; CHECK: # %bb.0:547; CHECK-NEXT: vsetvli a0, zero, e16, mf2, tu, ma548; CHECK-NEXT: vcompress.vm v8, v9, v0549; CHECK-NEXT: ret550 %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)551 ret <vscale x 2 x bfloat> %ret552}553 554define <vscale x 4 x bfloat> @vector_compress_nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask) {555; CHECK-LABEL: vector_compress_nxv4bf16:556; CHECK: # %bb.0:557; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma558; CHECK-NEXT: vcompress.vm v9, v8, v0559; CHECK-NEXT: vmv.v.v v8, v9560; CHECK-NEXT: ret561 %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> poison)562 ret <vscale x 4 x bfloat> %ret563}564 565define <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) {566; CHECK-LABEL: vector_compress_nxv4bf16_passthru:567; CHECK: # %bb.0:568; CHECK-NEXT: vsetvli a0, zero, e16, m1, tu, ma569; CHECK-NEXT: vcompress.vm v8, v9, v0570; CHECK-NEXT: ret571 %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)572 ret <vscale x 4 x bfloat> %ret573}574 575define <vscale x 8 x bfloat> @vector_compress_nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask) {576; CHECK-LABEL: vector_compress_nxv8bf16:577; CHECK: # %bb.0:578; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma579; CHECK-NEXT: vcompress.vm v10, v8, v0580; CHECK-NEXT: vmv.v.v v8, v10581; CHECK-NEXT: ret582 %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> poison)583 ret <vscale x 8 x bfloat> %ret584}585 586define <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) {587; CHECK-LABEL: vector_compress_nxv8bf16_passthru:588; CHECK: # %bb.0:589; CHECK-NEXT: vsetvli a0, zero, e16, m2, tu, ma590; CHECK-NEXT: vcompress.vm v8, v10, v0591; CHECK-NEXT: ret592 %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)593 ret <vscale x 8 x bfloat> %ret594}595 596define <vscale x 16 x bfloat> @vector_compress_nxv16bf16(<vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask) {597; CHECK-LABEL: vector_compress_nxv16bf16:598; CHECK: # %bb.0:599; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma600; CHECK-NEXT: vcompress.vm v12, v8, v0601; CHECK-NEXT: vmv.v.v v8, v12602; CHECK-NEXT: ret603 %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> poison)604 ret <vscale x 16 x bfloat> %ret605}606 607define <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) {608; CHECK-LABEL: vector_compress_nxv16bf16_passthru:609; CHECK: # %bb.0:610; CHECK-NEXT: vsetvli a0, zero, e16, m4, tu, ma611; CHECK-NEXT: vcompress.vm v8, v12, v0612; CHECK-NEXT: ret613 %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)614 ret <vscale x 16 x bfloat> %ret615}616 617define <vscale x 32 x bfloat> @vector_compress_nxv32bf16(<vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask) {618; CHECK-LABEL: vector_compress_nxv32bf16:619; CHECK: # %bb.0:620; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma621; CHECK-NEXT: vcompress.vm v16, v8, v0622; CHECK-NEXT: vmv.v.v v8, v16623; CHECK-NEXT: ret624 %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> poison)625 ret <vscale x 32 x bfloat> %ret626}627 628define <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) {629; CHECK-LABEL: vector_compress_nxv32bf16_passthru:630; CHECK: # %bb.0:631; CHECK-NEXT: vsetvli a0, zero, e16, m8, tu, ma632; CHECK-NEXT: vcompress.vm v8, v16, v0633; CHECK-NEXT: ret634 %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)635 ret <vscale x 32 x bfloat> %ret636}637 638; Vector compress for f16 type639 640define <vscale x 1 x half> @vector_compress_nxv1f16(<vscale x 1 x half> %data, <vscale x 1 x i1> %mask) {641; CHECK-LABEL: vector_compress_nxv1f16:642; CHECK: # %bb.0:643; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma644; CHECK-NEXT: vcompress.vm v9, v8, v0645; CHECK-NEXT: vmv1r.v v8, v9646; CHECK-NEXT: ret647 %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> poison)648 ret <vscale x 1 x half> %ret649}650 651define <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) {652; CHECK-LABEL: vector_compress_nxv1f16_passthru:653; CHECK: # %bb.0:654; CHECK-NEXT: vsetvli a0, zero, e16, mf4, tu, ma655; CHECK-NEXT: vcompress.vm v8, v9, v0656; CHECK-NEXT: ret657 %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)658 ret <vscale x 1 x half> %ret659}660 661define <vscale x 2 x half> @vector_compress_nxv2f16(<vscale x 2 x half> %data, <vscale x 2 x i1> %mask) {662; CHECK-LABEL: vector_compress_nxv2f16:663; CHECK: # %bb.0:664; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma665; CHECK-NEXT: vcompress.vm v9, v8, v0666; CHECK-NEXT: vmv1r.v v8, v9667; CHECK-NEXT: ret668 %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> poison)669 ret <vscale x 2 x half> %ret670}671 672define <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) {673; CHECK-LABEL: vector_compress_nxv2f16_passthru:674; CHECK: # %bb.0:675; CHECK-NEXT: vsetvli a0, zero, e16, mf2, tu, ma676; CHECK-NEXT: vcompress.vm v8, v9, v0677; CHECK-NEXT: ret678 %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)679 ret <vscale x 2 x half> %ret680}681 682define <vscale x 4 x half> @vector_compress_nxv4f16(<vscale x 4 x half> %data, <vscale x 4 x i1> %mask) {683; CHECK-LABEL: vector_compress_nxv4f16:684; CHECK: # %bb.0:685; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma686; CHECK-NEXT: vcompress.vm v9, v8, v0687; CHECK-NEXT: vmv.v.v v8, v9688; CHECK-NEXT: ret689 %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> poison)690 ret <vscale x 4 x half> %ret691}692 693define <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) {694; CHECK-LABEL: vector_compress_nxv4f16_passthru:695; CHECK: # %bb.0:696; CHECK-NEXT: vsetvli a0, zero, e16, m1, tu, ma697; CHECK-NEXT: vcompress.vm v8, v9, v0698; CHECK-NEXT: ret699 %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)700 ret <vscale x 4 x half> %ret701}702 703define <vscale x 8 x half> @vector_compress_nxv8f16(<vscale x 8 x half> %data, <vscale x 8 x i1> %mask) {704; CHECK-LABEL: vector_compress_nxv8f16:705; CHECK: # %bb.0:706; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma707; CHECK-NEXT: vcompress.vm v10, v8, v0708; CHECK-NEXT: vmv.v.v v8, v10709; CHECK-NEXT: ret710 %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> poison)711 ret <vscale x 8 x half> %ret712}713 714define <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) {715; CHECK-LABEL: vector_compress_nxv8f16_passthru:716; CHECK: # %bb.0:717; CHECK-NEXT: vsetvli a0, zero, e16, m2, tu, ma718; CHECK-NEXT: vcompress.vm v8, v10, v0719; CHECK-NEXT: ret720 %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)721 ret <vscale x 8 x half> %ret722}723 724define <vscale x 16 x half> @vector_compress_nxv16f16(<vscale x 16 x half> %data, <vscale x 16 x i1> %mask) {725; CHECK-LABEL: vector_compress_nxv16f16:726; CHECK: # %bb.0:727; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma728; CHECK-NEXT: vcompress.vm v12, v8, v0729; CHECK-NEXT: vmv.v.v v8, v12730; CHECK-NEXT: ret731 %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> poison)732 ret <vscale x 16 x half> %ret733}734 735define <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) {736; CHECK-LABEL: vector_compress_nxv16f16_passthru:737; CHECK: # %bb.0:738; CHECK-NEXT: vsetvli a0, zero, e16, m4, tu, ma739; CHECK-NEXT: vcompress.vm v8, v12, v0740; CHECK-NEXT: ret741 %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)742 ret <vscale x 16 x half> %ret743}744 745define <vscale x 32 x half> @vector_compress_nxv32f16(<vscale x 32 x half> %data, <vscale x 32 x i1> %mask) {746; CHECK-LABEL: vector_compress_nxv32f16:747; CHECK: # %bb.0:748; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma749; CHECK-NEXT: vcompress.vm v16, v8, v0750; CHECK-NEXT: vmv.v.v v8, v16751; CHECK-NEXT: ret752 %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> poison)753 ret <vscale x 32 x half> %ret754}755 756define <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) {757; CHECK-LABEL: vector_compress_nxv32f16_passthru:758; CHECK: # %bb.0:759; CHECK-NEXT: vsetvli a0, zero, e16, m8, tu, ma760; CHECK-NEXT: vcompress.vm v8, v16, v0761; CHECK-NEXT: ret762 %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)763 ret <vscale x 32 x half> %ret764}765 766; Vector compress for f32 type767 768define <vscale x 1 x float> @vector_compress_nxv1f32(<vscale x 1 x float> %data, <vscale x 1 x i1> %mask) {769; CHECK-LABEL: vector_compress_nxv1f32:770; CHECK: # %bb.0:771; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma772; CHECK-NEXT: vcompress.vm v9, v8, v0773; CHECK-NEXT: vmv1r.v v8, v9774; CHECK-NEXT: ret775 %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> poison)776 ret <vscale x 1 x float> %ret777}778 779define <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) {780; CHECK-LABEL: vector_compress_nxv1f32_passthru:781; CHECK: # %bb.0:782; CHECK-NEXT: vsetvli a0, zero, e32, mf2, tu, ma783; CHECK-NEXT: vcompress.vm v8, v9, v0784; CHECK-NEXT: ret785 %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)786 ret <vscale x 1 x float> %ret787}788 789define <vscale x 2 x float> @vector_compress_nxv2f32(<vscale x 2 x float> %data, <vscale x 2 x i1> %mask) {790; CHECK-LABEL: vector_compress_nxv2f32:791; CHECK: # %bb.0:792; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma793; CHECK-NEXT: vcompress.vm v9, v8, v0794; CHECK-NEXT: vmv.v.v v8, v9795; CHECK-NEXT: ret796 %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> poison)797 ret <vscale x 2 x float> %ret798}799 800define <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) {801; CHECK-LABEL: vector_compress_nxv2f32_passthru:802; CHECK: # %bb.0:803; CHECK-NEXT: vsetvli a0, zero, e32, m1, tu, ma804; CHECK-NEXT: vcompress.vm v8, v9, v0805; CHECK-NEXT: ret806 %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)807 ret <vscale x 2 x float> %ret808}809 810define <vscale x 4 x float> @vector_compress_nxv4f32(<vscale x 4 x float> %data, <vscale x 4 x i1> %mask) {811; CHECK-LABEL: vector_compress_nxv4f32:812; CHECK: # %bb.0:813; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma814; CHECK-NEXT: vcompress.vm v10, v8, v0815; CHECK-NEXT: vmv.v.v v8, v10816; CHECK-NEXT: ret817 %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> poison)818 ret <vscale x 4 x float> %ret819}820 821define <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) {822; CHECK-LABEL: vector_compress_nxv4f32_passthru:823; CHECK: # %bb.0:824; CHECK-NEXT: vsetvli a0, zero, e32, m2, tu, ma825; CHECK-NEXT: vcompress.vm v8, v10, v0826; CHECK-NEXT: ret827 %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)828 ret <vscale x 4 x float> %ret829}830 831define <vscale x 8 x float> @vector_compress_nxv8f32(<vscale x 8 x float> %data, <vscale x 8 x i1> %mask) {832; CHECK-LABEL: vector_compress_nxv8f32:833; CHECK: # %bb.0:834; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma835; CHECK-NEXT: vcompress.vm v12, v8, v0836; CHECK-NEXT: vmv.v.v v8, v12837; CHECK-NEXT: ret838 %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> poison)839 ret <vscale x 8 x float> %ret840}841 842define <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) {843; CHECK-LABEL: vector_compress_nxv8f32_passthru:844; CHECK: # %bb.0:845; CHECK-NEXT: vsetvli a0, zero, e32, m4, tu, ma846; CHECK-NEXT: vcompress.vm v8, v12, v0847; CHECK-NEXT: ret848 %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)849 ret <vscale x 8 x float> %ret850}851 852define <vscale x 16 x float> @vector_compress_nxv16f32(<vscale x 16 x float> %data, <vscale x 16 x i1> %mask) {853; CHECK-LABEL: vector_compress_nxv16f32:854; CHECK: # %bb.0:855; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma856; CHECK-NEXT: vcompress.vm v16, v8, v0857; CHECK-NEXT: vmv.v.v v8, v16858; CHECK-NEXT: ret859 %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> poison)860 ret <vscale x 16 x float> %ret861}862 863define <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) {864; CHECK-LABEL: vector_compress_nxv16f32_passthru:865; CHECK: # %bb.0:866; CHECK-NEXT: vsetvli a0, zero, e32, m8, tu, ma867; CHECK-NEXT: vcompress.vm v8, v16, v0868; CHECK-NEXT: ret869 %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)870 ret <vscale x 16 x float> %ret871}872 873; Vector compress for f64 type874 875define <vscale x 1 x double> @vector_compress_nxv1f64(<vscale x 1 x double> %data, <vscale x 1 x i1> %mask) {876; CHECK-LABEL: vector_compress_nxv1f64:877; CHECK: # %bb.0:878; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma879; CHECK-NEXT: vcompress.vm v9, v8, v0880; CHECK-NEXT: vmv.v.v v8, v9881; CHECK-NEXT: ret882 %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> poison)883 ret <vscale x 1 x double> %ret884}885 886define <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) {887; CHECK-LABEL: vector_compress_nxv1f64_passthru:888; CHECK: # %bb.0:889; CHECK-NEXT: vsetvli a0, zero, e64, m1, tu, ma890; CHECK-NEXT: vcompress.vm v8, v9, v0891; CHECK-NEXT: ret892 %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)893 ret <vscale x 1 x double> %ret894}895 896define <vscale x 2 x double> @vector_compress_nxv2f64(<vscale x 2 x double> %data, <vscale x 2 x i1> %mask) {897; CHECK-LABEL: vector_compress_nxv2f64:898; CHECK: # %bb.0:899; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma900; CHECK-NEXT: vcompress.vm v10, v8, v0901; CHECK-NEXT: vmv.v.v v8, v10902; CHECK-NEXT: ret903 %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> poison)904 ret <vscale x 2 x double> %ret905}906 907define <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) {908; CHECK-LABEL: vector_compress_nxv2f64_passthru:909; CHECK: # %bb.0:910; CHECK-NEXT: vsetvli a0, zero, e64, m2, tu, ma911; CHECK-NEXT: vcompress.vm v8, v10, v0912; CHECK-NEXT: ret913 %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)914 ret <vscale x 2 x double> %ret915}916 917define <vscale x 4 x double> @vector_compress_nxv4f64(<vscale x 4 x double> %data, <vscale x 4 x i1> %mask) {918; CHECK-LABEL: vector_compress_nxv4f64:919; CHECK: # %bb.0:920; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma921; CHECK-NEXT: vcompress.vm v12, v8, v0922; CHECK-NEXT: vmv.v.v v8, v12923; CHECK-NEXT: ret924 %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> poison)925 ret <vscale x 4 x double> %ret926}927 928define <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) {929; CHECK-LABEL: vector_compress_nxv4f64_passthru:930; CHECK: # %bb.0:931; CHECK-NEXT: vsetvli a0, zero, e64, m4, tu, ma932; CHECK-NEXT: vcompress.vm v8, v12, v0933; CHECK-NEXT: ret934 %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)935 ret <vscale x 4 x double> %ret936}937 938define <vscale x 8 x double> @vector_compress_nxv8f64(<vscale x 8 x double> %data, <vscale x 8 x i1> %mask) {939; CHECK-LABEL: vector_compress_nxv8f64:940; CHECK: # %bb.0:941; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma942; CHECK-NEXT: vcompress.vm v16, v8, v0943; CHECK-NEXT: vmv.v.v v8, v16944; CHECK-NEXT: ret945 %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> poison)946 ret <vscale x 8 x double> %ret947}948 949define <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) {950; CHECK-LABEL: vector_compress_nxv8f64_passthru:951; CHECK: # %bb.0:952; CHECK-NEXT: vsetvli a0, zero, e64, m8, tu, ma953; CHECK-NEXT: vcompress.vm v8, v16, v0954; CHECK-NEXT: ret955 %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)956 ret <vscale x 8 x double> %ret957}958