249 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s4 5define <vscale x 1 x i1> @insertelt_nxv1i1(<vscale x 1 x i1> %x, i1 %elt) {6; CHECK-LABEL: insertelt_nxv1i1:7; CHECK: # %bb.0:8; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma9; CHECK-NEXT: vmv.v.i v8, 010; CHECK-NEXT: vmerge.vim v8, v8, 1, v011; CHECK-NEXT: vmv.s.x v9, a012; CHECK-NEXT: vsetivli zero, 3, e8, mf8, tu, ma13; CHECK-NEXT: vslideup.vi v8, v9, 214; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma15; CHECK-NEXT: vand.vi v8, v8, 116; CHECK-NEXT: vmsne.vi v0, v8, 017; CHECK-NEXT: ret18 %y = insertelement <vscale x 1 x i1> %x, i1 %elt, i64 219 ret <vscale x 1 x i1> %y20}21 22define <vscale x 1 x i1> @insertelt_idx_nxv1i1(<vscale x 1 x i1> %x, i1 %elt, i64 %idx) {23; CHECK-LABEL: insertelt_idx_nxv1i1:24; CHECK: # %bb.0:25; CHECK-NEXT: vsetvli a2, zero, e8, mf8, ta, ma26; CHECK-NEXT: vmv.v.i v8, 027; CHECK-NEXT: addi a2, a1, 128; CHECK-NEXT: vmerge.vim v8, v8, 1, v029; CHECK-NEXT: vmv.s.x v9, a030; CHECK-NEXT: vsetvli zero, a2, e8, mf8, tu, ma31; CHECK-NEXT: vslideup.vx v8, v9, a132; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma33; CHECK-NEXT: vand.vi v8, v8, 134; CHECK-NEXT: vmsne.vi v0, v8, 035; CHECK-NEXT: ret36 %y = insertelement <vscale x 1 x i1> %x, i1 %elt, i64 %idx37 ret <vscale x 1 x i1> %y38}39 40define <vscale x 2 x i1> @insertelt_nxv2i1(<vscale x 2 x i1> %x, i1 %elt) {41; CHECK-LABEL: insertelt_nxv2i1:42; CHECK: # %bb.0:43; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma44; CHECK-NEXT: vmv.v.i v8, 045; CHECK-NEXT: vmerge.vim v8, v8, 1, v046; CHECK-NEXT: vmv.s.x v9, a047; CHECK-NEXT: vsetivli zero, 3, e8, mf4, tu, ma48; CHECK-NEXT: vslideup.vi v8, v9, 249; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma50; CHECK-NEXT: vand.vi v8, v8, 151; CHECK-NEXT: vmsne.vi v0, v8, 052; CHECK-NEXT: ret53 %y = insertelement <vscale x 2 x i1> %x, i1 %elt, i64 254 ret <vscale x 2 x i1> %y55}56 57define <vscale x 2 x i1> @insertelt_idx_nxv2i1(<vscale x 2 x i1> %x, i1 %elt, i64 %idx) {58; CHECK-LABEL: insertelt_idx_nxv2i1:59; CHECK: # %bb.0:60; CHECK-NEXT: vsetvli a2, zero, e8, mf4, ta, ma61; CHECK-NEXT: vmv.v.i v8, 062; CHECK-NEXT: addi a2, a1, 163; CHECK-NEXT: vmerge.vim v8, v8, 1, v064; CHECK-NEXT: vmv.s.x v9, a065; CHECK-NEXT: vsetvli zero, a2, e8, mf4, tu, ma66; CHECK-NEXT: vslideup.vx v8, v9, a167; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma68; CHECK-NEXT: vand.vi v8, v8, 169; CHECK-NEXT: vmsne.vi v0, v8, 070; CHECK-NEXT: ret71 %y = insertelement <vscale x 2 x i1> %x, i1 %elt, i64 %idx72 ret <vscale x 2 x i1> %y73}74 75define <vscale x 4 x i1> @insertelt_nxv4i1(<vscale x 4 x i1> %x, i1 %elt) {76; CHECK-LABEL: insertelt_nxv4i1:77; CHECK: # %bb.0:78; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma79; CHECK-NEXT: vmv.v.i v8, 080; CHECK-NEXT: vmerge.vim v8, v8, 1, v081; CHECK-NEXT: vmv.s.x v9, a082; CHECK-NEXT: vsetivli zero, 3, e8, mf2, tu, ma83; CHECK-NEXT: vslideup.vi v8, v9, 284; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma85; CHECK-NEXT: vand.vi v8, v8, 186; CHECK-NEXT: vmsne.vi v0, v8, 087; CHECK-NEXT: ret88 %y = insertelement <vscale x 4 x i1> %x, i1 %elt, i64 289 ret <vscale x 4 x i1> %y90}91 92define <vscale x 4 x i1> @insertelt_idx_nxv4i1(<vscale x 4 x i1> %x, i1 %elt, i64 %idx) {93; CHECK-LABEL: insertelt_idx_nxv4i1:94; CHECK: # %bb.0:95; CHECK-NEXT: vsetvli a2, zero, e8, mf2, ta, ma96; CHECK-NEXT: vmv.v.i v8, 097; CHECK-NEXT: addi a2, a1, 198; CHECK-NEXT: vmerge.vim v8, v8, 1, v099; CHECK-NEXT: vmv.s.x v9, a0100; CHECK-NEXT: vsetvli zero, a2, e8, mf2, tu, ma101; CHECK-NEXT: vslideup.vx v8, v9, a1102; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma103; CHECK-NEXT: vand.vi v8, v8, 1104; CHECK-NEXT: vmsne.vi v0, v8, 0105; CHECK-NEXT: ret106 %y = insertelement <vscale x 4 x i1> %x, i1 %elt, i64 %idx107 ret <vscale x 4 x i1> %y108}109 110define <vscale x 8 x i1> @insertelt_nxv8i1(<vscale x 8 x i1> %x, i1 %elt) {111; CHECK-LABEL: insertelt_nxv8i1:112; CHECK: # %bb.0:113; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma114; CHECK-NEXT: vmv.v.i v8, 0115; CHECK-NEXT: vmerge.vim v8, v8, 1, v0116; CHECK-NEXT: vmv.s.x v9, a0117; CHECK-NEXT: vsetivli zero, 3, e8, m1, tu, ma118; CHECK-NEXT: vslideup.vi v8, v9, 2119; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma120; CHECK-NEXT: vand.vi v8, v8, 1121; CHECK-NEXT: vmsne.vi v0, v8, 0122; CHECK-NEXT: ret123 %y = insertelement <vscale x 8 x i1> %x, i1 %elt, i64 2124 ret <vscale x 8 x i1> %y125}126 127define <vscale x 8 x i1> @insertelt_idx_nxv8i1(<vscale x 8 x i1> %x, i1 %elt, i64 %idx) {128; CHECK-LABEL: insertelt_idx_nxv8i1:129; CHECK: # %bb.0:130; CHECK-NEXT: vsetvli a2, zero, e8, m1, ta, ma131; CHECK-NEXT: vmv.v.i v8, 0132; CHECK-NEXT: addi a2, a1, 1133; CHECK-NEXT: vmerge.vim v8, v8, 1, v0134; CHECK-NEXT: vmv.s.x v9, a0135; CHECK-NEXT: vsetvli zero, a2, e8, m1, tu, ma136; CHECK-NEXT: vslideup.vx v8, v9, a1137; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma138; CHECK-NEXT: vand.vi v8, v8, 1139; CHECK-NEXT: vmsne.vi v0, v8, 0140; CHECK-NEXT: ret141 %y = insertelement <vscale x 8 x i1> %x, i1 %elt, i64 %idx142 ret <vscale x 8 x i1> %y143}144 145define <vscale x 16 x i1> @insertelt_nxv16i1(<vscale x 16 x i1> %x, i1 %elt) {146; CHECK-LABEL: insertelt_nxv16i1:147; CHECK: # %bb.0:148; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma149; CHECK-NEXT: vmv.v.i v8, 0150; CHECK-NEXT: vmerge.vim v8, v8, 1, v0151; CHECK-NEXT: vmv.s.x v10, a0152; CHECK-NEXT: vsetivli zero, 3, e8, m1, tu, ma153; CHECK-NEXT: vslideup.vi v8, v10, 2154; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma155; CHECK-NEXT: vand.vi v8, v8, 1156; CHECK-NEXT: vmsne.vi v0, v8, 0157; CHECK-NEXT: ret158 %y = insertelement <vscale x 16 x i1> %x, i1 %elt, i64 2159 ret <vscale x 16 x i1> %y160}161 162define <vscale x 16 x i1> @insertelt_idx_nxv16i1(<vscale x 16 x i1> %x, i1 %elt, i64 %idx) {163; CHECK-LABEL: insertelt_idx_nxv16i1:164; CHECK: # %bb.0:165; CHECK-NEXT: vsetvli a2, zero, e8, m2, ta, ma166; CHECK-NEXT: vmv.v.i v8, 0167; CHECK-NEXT: vmerge.vim v8, v8, 1, v0168; CHECK-NEXT: vmv.s.x v10, a0169; CHECK-NEXT: addi a0, a1, 1170; CHECK-NEXT: vsetvli zero, a0, e8, m2, tu, ma171; CHECK-NEXT: vslideup.vx v8, v10, a1172; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma173; CHECK-NEXT: vand.vi v8, v8, 1174; CHECK-NEXT: vmsne.vi v0, v8, 0175; CHECK-NEXT: ret176 %y = insertelement <vscale x 16 x i1> %x, i1 %elt, i64 %idx177 ret <vscale x 16 x i1> %y178}179 180define <vscale x 32 x i1> @insertelt_nxv32i1(<vscale x 32 x i1> %x, i1 %elt) {181; CHECK-LABEL: insertelt_nxv32i1:182; CHECK: # %bb.0:183; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma184; CHECK-NEXT: vmv.v.i v8, 0185; CHECK-NEXT: vmerge.vim v8, v8, 1, v0186; CHECK-NEXT: vmv.s.x v12, a0187; CHECK-NEXT: vsetivli zero, 3, e8, m1, tu, ma188; CHECK-NEXT: vslideup.vi v8, v12, 2189; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma190; CHECK-NEXT: vand.vi v8, v8, 1191; CHECK-NEXT: vmsne.vi v0, v8, 0192; CHECK-NEXT: ret193 %y = insertelement <vscale x 32 x i1> %x, i1 %elt, i64 2194 ret <vscale x 32 x i1> %y195}196 197define <vscale x 32 x i1> @insertelt_idx_nxv32i1(<vscale x 32 x i1> %x, i1 %elt, i64 %idx) {198; CHECK-LABEL: insertelt_idx_nxv32i1:199; CHECK: # %bb.0:200; CHECK-NEXT: vsetvli a2, zero, e8, m4, ta, ma201; CHECK-NEXT: vmv.v.i v8, 0202; CHECK-NEXT: vmerge.vim v8, v8, 1, v0203; CHECK-NEXT: vmv.s.x v12, a0204; CHECK-NEXT: addi a0, a1, 1205; CHECK-NEXT: vsetvli zero, a0, e8, m4, tu, ma206; CHECK-NEXT: vslideup.vx v8, v12, a1207; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma208; CHECK-NEXT: vand.vi v8, v8, 1209; CHECK-NEXT: vmsne.vi v0, v8, 0210; CHECK-NEXT: ret211 %y = insertelement <vscale x 32 x i1> %x, i1 %elt, i64 %idx212 ret <vscale x 32 x i1> %y213}214 215define <vscale x 64 x i1> @insertelt_nxv64i1(<vscale x 64 x i1> %x, i1 %elt) {216; CHECK-LABEL: insertelt_nxv64i1:217; CHECK: # %bb.0:218; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma219; CHECK-NEXT: vmv.v.i v8, 0220; CHECK-NEXT: vmerge.vim v8, v8, 1, v0221; CHECK-NEXT: vmv.s.x v16, a0222; CHECK-NEXT: vsetivli zero, 3, e8, m1, tu, ma223; CHECK-NEXT: vslideup.vi v8, v16, 2224; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma225; CHECK-NEXT: vand.vi v8, v8, 1226; CHECK-NEXT: vmsne.vi v0, v8, 0227; CHECK-NEXT: ret228 %y = insertelement <vscale x 64 x i1> %x, i1 %elt, i64 2229 ret <vscale x 64 x i1> %y230}231 232define <vscale x 64 x i1> @insertelt_idx_nxv64i1(<vscale x 64 x i1> %x, i1 %elt, i64 %idx) {233; CHECK-LABEL: insertelt_idx_nxv64i1:234; CHECK: # %bb.0:235; CHECK-NEXT: vsetvli a2, zero, e8, m8, ta, ma236; CHECK-NEXT: vmv.v.i v8, 0237; CHECK-NEXT: vmerge.vim v8, v8, 1, v0238; CHECK-NEXT: vmv.s.x v16, a0239; CHECK-NEXT: addi a0, a1, 1240; CHECK-NEXT: vsetvli zero, a0, e8, m8, tu, ma241; CHECK-NEXT: vslideup.vx v8, v16, a1242; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma243; CHECK-NEXT: vand.vi v8, v8, 1244; CHECK-NEXT: vmsne.vi v0, v8, 0245; CHECK-NEXT: ret246 %y = insertelement <vscale x 64 x i1> %x, i1 %elt, i64 %idx247 ret <vscale x 64 x i1> %y248}249