brintos

brintos / llvm-project-archived public Read only

0
0
Text · 46.0 KiB · 6a3bfae Raw
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