brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.6 KiB · c3cc90c Raw
841 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s4 5define <vscale x 1 x i8> @insertelt_nxv1i8_0(<vscale x 1 x i8> %v, i8 signext %elt) {6; CHECK-LABEL: insertelt_nxv1i8_0:7; CHECK:       # %bb.0:8; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma9; CHECK-NEXT:    vmv.s.x v8, a010; CHECK-NEXT:    ret11  %r = insertelement <vscale x 1 x i8> %v, i8 %elt, i32 012  ret <vscale x 1 x i8> %r13}14 15define <vscale x 1 x i8> @insertelt_nxv1i8_imm(<vscale x 1 x i8> %v, i8 signext %elt) {16; CHECK-LABEL: insertelt_nxv1i8_imm:17; CHECK:       # %bb.0:18; CHECK-NEXT:    vsetivli zero, 4, e8, mf8, tu, ma19; CHECK-NEXT:    vmv.s.x v9, a020; CHECK-NEXT:    vslideup.vi v8, v9, 321; CHECK-NEXT:    ret22  %r = insertelement <vscale x 1 x i8> %v, i8 %elt, i32 323  ret <vscale x 1 x i8> %r24}25 26define <vscale x 1 x i8> @insertelt_nxv1i8_idx(<vscale x 1 x i8> %v, i8 signext %elt, i32 signext %idx) {27; CHECK-LABEL: insertelt_nxv1i8_idx:28; CHECK:       # %bb.0:29; CHECK-NEXT:    addi a2, a1, 130; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma31; CHECK-NEXT:    vmv.s.x v9, a032; CHECK-NEXT:    vsetvli zero, a2, e8, mf8, tu, ma33; CHECK-NEXT:    vslideup.vx v8, v9, a134; CHECK-NEXT:    ret35  %r = insertelement <vscale x 1 x i8> %v, i8 %elt, i32 %idx36  ret <vscale x 1 x i8> %r37}38 39define <vscale x 2 x i8> @insertelt_nxv2i8_0(<vscale x 2 x i8> %v, i8 signext %elt) {40; CHECK-LABEL: insertelt_nxv2i8_0:41; CHECK:       # %bb.0:42; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma43; CHECK-NEXT:    vmv.s.x v8, a044; CHECK-NEXT:    ret45  %r = insertelement <vscale x 2 x i8> %v, i8 %elt, i32 046  ret <vscale x 2 x i8> %r47}48 49define <vscale x 2 x i8> @insertelt_nxv2i8_imm(<vscale x 2 x i8> %v, i8 signext %elt) {50; CHECK-LABEL: insertelt_nxv2i8_imm:51; CHECK:       # %bb.0:52; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, tu, ma53; CHECK-NEXT:    vmv.s.x v9, a054; CHECK-NEXT:    vslideup.vi v8, v9, 355; CHECK-NEXT:    ret56  %r = insertelement <vscale x 2 x i8> %v, i8 %elt, i32 357  ret <vscale x 2 x i8> %r58}59 60define <vscale x 2 x i8> @insertelt_nxv2i8_idx(<vscale x 2 x i8> %v, i8 signext %elt, i32 signext %idx) {61; CHECK-LABEL: insertelt_nxv2i8_idx:62; CHECK:       # %bb.0:63; CHECK-NEXT:    addi a2, a1, 164; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma65; CHECK-NEXT:    vmv.s.x v9, a066; CHECK-NEXT:    vsetvli zero, a2, e8, mf4, tu, ma67; CHECK-NEXT:    vslideup.vx v8, v9, a168; CHECK-NEXT:    ret69  %r = insertelement <vscale x 2 x i8> %v, i8 %elt, i32 %idx70  ret <vscale x 2 x i8> %r71}72 73define <vscale x 4 x i8> @insertelt_nxv4i8_0(<vscale x 4 x i8> %v, i8 signext %elt) {74; CHECK-LABEL: insertelt_nxv4i8_0:75; CHECK:       # %bb.0:76; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma77; CHECK-NEXT:    vmv.s.x v8, a078; CHECK-NEXT:    ret79  %r = insertelement <vscale x 4 x i8> %v, i8 %elt, i32 080  ret <vscale x 4 x i8> %r81}82 83define <vscale x 4 x i8> @insertelt_nxv4i8_imm(<vscale x 4 x i8> %v, i8 signext %elt) {84; CHECK-LABEL: insertelt_nxv4i8_imm:85; CHECK:       # %bb.0:86; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma87; CHECK-NEXT:    vmv.s.x v9, a088; CHECK-NEXT:    vslideup.vi v8, v9, 389; CHECK-NEXT:    ret90  %r = insertelement <vscale x 4 x i8> %v, i8 %elt, i32 391  ret <vscale x 4 x i8> %r92}93 94define <vscale x 4 x i8> @insertelt_nxv4i8_idx(<vscale x 4 x i8> %v, i8 signext %elt, i32 signext %idx) {95; CHECK-LABEL: insertelt_nxv4i8_idx:96; CHECK:       # %bb.0:97; CHECK-NEXT:    addi a2, a1, 198; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma99; 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:    ret103  %r = insertelement <vscale x 4 x i8> %v, i8 %elt, i32 %idx104  ret <vscale x 4 x i8> %r105}106 107define <vscale x 8 x i8> @insertelt_nxv8i8_0(<vscale x 8 x i8> %v, i8 signext %elt) {108; CHECK-LABEL: insertelt_nxv8i8_0:109; CHECK:       # %bb.0:110; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma111; CHECK-NEXT:    vmv.s.x v8, a0112; CHECK-NEXT:    ret113  %r = insertelement <vscale x 8 x i8> %v, i8 %elt, i32 0114  ret <vscale x 8 x i8> %r115}116 117define <vscale x 8 x i8> @insertelt_nxv8i8_imm(<vscale x 8 x i8> %v, i8 signext %elt) {118; CHECK-LABEL: insertelt_nxv8i8_imm:119; CHECK:       # %bb.0:120; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma121; CHECK-NEXT:    vmv.s.x v9, a0122; CHECK-NEXT:    vslideup.vi v8, v9, 3123; CHECK-NEXT:    ret124  %r = insertelement <vscale x 8 x i8> %v, i8 %elt, i32 3125  ret <vscale x 8 x i8> %r126}127 128define <vscale x 8 x i8> @insertelt_nxv8i8_idx(<vscale x 8 x i8> %v, i8 signext %elt, i32 signext %idx) {129; CHECK-LABEL: insertelt_nxv8i8_idx:130; CHECK:       # %bb.0:131; CHECK-NEXT:    addi a2, a1, 1132; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma133; CHECK-NEXT:    vmv.s.x v9, a0134; CHECK-NEXT:    vsetvli zero, a2, e8, m1, tu, ma135; CHECK-NEXT:    vslideup.vx v8, v9, a1136; CHECK-NEXT:    ret137  %r = insertelement <vscale x 8 x i8> %v, i8 %elt, i32 %idx138  ret <vscale x 8 x i8> %r139}140 141define <vscale x 16 x i8> @insertelt_nxv16i8_0(<vscale x 16 x i8> %v, i8 signext %elt) {142; CHECK-LABEL: insertelt_nxv16i8_0:143; CHECK:       # %bb.0:144; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma145; CHECK-NEXT:    vmv.s.x v8, a0146; CHECK-NEXT:    ret147  %r = insertelement <vscale x 16 x i8> %v, i8 %elt, i32 0148  ret <vscale x 16 x i8> %r149}150 151define <vscale x 16 x i8> @insertelt_nxv16i8_imm(<vscale x 16 x i8> %v, i8 signext %elt) {152; CHECK-LABEL: insertelt_nxv16i8_imm:153; CHECK:       # %bb.0:154; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma155; CHECK-NEXT:    vmv.s.x v10, a0156; CHECK-NEXT:    vslideup.vi v8, v10, 3157; CHECK-NEXT:    ret158  %r = insertelement <vscale x 16 x i8> %v, i8 %elt, i32 3159  ret <vscale x 16 x i8> %r160}161 162define <vscale x 16 x i8> @insertelt_nxv16i8_idx(<vscale x 16 x i8> %v, i8 signext %elt, i32 signext %idx) {163; CHECK-LABEL: insertelt_nxv16i8_idx:164; CHECK:       # %bb.0:165; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma166; CHECK-NEXT:    vmv.s.x v10, a0167; CHECK-NEXT:    addi a0, a1, 1168; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, ma169; CHECK-NEXT:    vslideup.vx v8, v10, a1170; CHECK-NEXT:    ret171  %r = insertelement <vscale x 16 x i8> %v, i8 %elt, i32 %idx172  ret <vscale x 16 x i8> %r173}174 175define <vscale x 32 x i8> @insertelt_nxv32i8_0(<vscale x 32 x i8> %v, i8 signext %elt) {176; CHECK-LABEL: insertelt_nxv32i8_0:177; CHECK:       # %bb.0:178; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma179; CHECK-NEXT:    vmv.s.x v8, a0180; CHECK-NEXT:    ret181  %r = insertelement <vscale x 32 x i8> %v, i8 %elt, i32 0182  ret <vscale x 32 x i8> %r183}184 185define <vscale x 32 x i8> @insertelt_nxv32i8_imm(<vscale x 32 x i8> %v, i8 signext %elt) {186; CHECK-LABEL: insertelt_nxv32i8_imm:187; CHECK:       # %bb.0:188; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma189; CHECK-NEXT:    vmv.s.x v12, a0190; CHECK-NEXT:    vslideup.vi v8, v12, 3191; CHECK-NEXT:    ret192  %r = insertelement <vscale x 32 x i8> %v, i8 %elt, i32 3193  ret <vscale x 32 x i8> %r194}195 196define <vscale x 32 x i8> @insertelt_nxv32i8_idx(<vscale x 32 x i8> %v, i8 signext %elt, i32 signext %idx) {197; CHECK-LABEL: insertelt_nxv32i8_idx:198; CHECK:       # %bb.0:199; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma200; CHECK-NEXT:    vmv.s.x v12, a0201; CHECK-NEXT:    addi a0, a1, 1202; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, ma203; CHECK-NEXT:    vslideup.vx v8, v12, a1204; CHECK-NEXT:    ret205  %r = insertelement <vscale x 32 x i8> %v, i8 %elt, i32 %idx206  ret <vscale x 32 x i8> %r207}208 209define <vscale x 64 x i8> @insertelt_nxv64i8_0(<vscale x 64 x i8> %v, i8 signext %elt) {210; CHECK-LABEL: insertelt_nxv64i8_0:211; CHECK:       # %bb.0:212; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma213; CHECK-NEXT:    vmv.s.x v8, a0214; CHECK-NEXT:    ret215  %r = insertelement <vscale x 64 x i8> %v, i8 %elt, i32 0216  ret <vscale x 64 x i8> %r217}218 219define <vscale x 64 x i8> @insertelt_nxv64i8_imm(<vscale x 64 x i8> %v, i8 signext %elt) {220; CHECK-LABEL: insertelt_nxv64i8_imm:221; CHECK:       # %bb.0:222; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma223; CHECK-NEXT:    vmv.s.x v16, a0224; CHECK-NEXT:    vslideup.vi v8, v16, 3225; CHECK-NEXT:    ret226  %r = insertelement <vscale x 64 x i8> %v, i8 %elt, i32 3227  ret <vscale x 64 x i8> %r228}229 230define <vscale x 64 x i8> @insertelt_nxv64i8_idx(<vscale x 64 x i8> %v, i8 signext %elt, i32 signext %idx) {231; CHECK-LABEL: insertelt_nxv64i8_idx:232; CHECK:       # %bb.0:233; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma234; CHECK-NEXT:    vmv.s.x v16, a0235; CHECK-NEXT:    addi a0, a1, 1236; CHECK-NEXT:    vsetvli zero, a0, e8, m8, tu, ma237; CHECK-NEXT:    vslideup.vx v8, v16, a1238; CHECK-NEXT:    ret239  %r = insertelement <vscale x 64 x i8> %v, i8 %elt, i32 %idx240  ret <vscale x 64 x i8> %r241}242 243define <vscale x 1 x i16> @insertelt_nxv1i16_0(<vscale x 1 x i16> %v, i16 signext %elt) {244; CHECK-LABEL: insertelt_nxv1i16_0:245; CHECK:       # %bb.0:246; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma247; CHECK-NEXT:    vmv.s.x v8, a0248; CHECK-NEXT:    ret249  %r = insertelement <vscale x 1 x i16> %v, i16 %elt, i32 0250  ret <vscale x 1 x i16> %r251}252 253define <vscale x 1 x i16> @insertelt_nxv1i16_imm(<vscale x 1 x i16> %v, i16 signext %elt) {254; CHECK-LABEL: insertelt_nxv1i16_imm:255; CHECK:       # %bb.0:256; CHECK-NEXT:    vsetivli zero, 4, e16, mf4, tu, ma257; CHECK-NEXT:    vmv.s.x v9, a0258; CHECK-NEXT:    vslideup.vi v8, v9, 3259; CHECK-NEXT:    ret260  %r = insertelement <vscale x 1 x i16> %v, i16 %elt, i32 3261  ret <vscale x 1 x i16> %r262}263 264define <vscale x 1 x i16> @insertelt_nxv1i16_idx(<vscale x 1 x i16> %v, i16 signext %elt, i32 signext %idx) {265; CHECK-LABEL: insertelt_nxv1i16_idx:266; CHECK:       # %bb.0:267; CHECK-NEXT:    addi a2, a1, 1268; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma269; CHECK-NEXT:    vmv.s.x v9, a0270; CHECK-NEXT:    vsetvli zero, a2, e16, mf4, tu, ma271; CHECK-NEXT:    vslideup.vx v8, v9, a1272; CHECK-NEXT:    ret273  %r = insertelement <vscale x 1 x i16> %v, i16 %elt, i32 %idx274  ret <vscale x 1 x i16> %r275}276 277define <vscale x 2 x i16> @insertelt_nxv2i16_0(<vscale x 2 x i16> %v, i16 signext %elt) {278; CHECK-LABEL: insertelt_nxv2i16_0:279; CHECK:       # %bb.0:280; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma281; CHECK-NEXT:    vmv.s.x v8, a0282; CHECK-NEXT:    ret283  %r = insertelement <vscale x 2 x i16> %v, i16 %elt, i32 0284  ret <vscale x 2 x i16> %r285}286 287define <vscale x 2 x i16> @insertelt_nxv2i16_imm(<vscale x 2 x i16> %v, i16 signext %elt) {288; CHECK-LABEL: insertelt_nxv2i16_imm:289; CHECK:       # %bb.0:290; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, tu, ma291; CHECK-NEXT:    vmv.s.x v9, a0292; CHECK-NEXT:    vslideup.vi v8, v9, 3293; CHECK-NEXT:    ret294  %r = insertelement <vscale x 2 x i16> %v, i16 %elt, i32 3295  ret <vscale x 2 x i16> %r296}297 298define <vscale x 2 x i16> @insertelt_nxv2i16_idx(<vscale x 2 x i16> %v, i16 signext %elt, i32 signext %idx) {299; CHECK-LABEL: insertelt_nxv2i16_idx:300; CHECK:       # %bb.0:301; CHECK-NEXT:    addi a2, a1, 1302; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma303; CHECK-NEXT:    vmv.s.x v9, a0304; CHECK-NEXT:    vsetvli zero, a2, e16, mf2, tu, ma305; CHECK-NEXT:    vslideup.vx v8, v9, a1306; CHECK-NEXT:    ret307  %r = insertelement <vscale x 2 x i16> %v, i16 %elt, i32 %idx308  ret <vscale x 2 x i16> %r309}310 311define <vscale x 4 x i16> @insertelt_nxv4i16_0(<vscale x 4 x i16> %v, i16 signext %elt) {312; CHECK-LABEL: insertelt_nxv4i16_0:313; CHECK:       # %bb.0:314; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma315; CHECK-NEXT:    vmv.s.x v8, a0316; CHECK-NEXT:    ret317  %r = insertelement <vscale x 4 x i16> %v, i16 %elt, i32 0318  ret <vscale x 4 x i16> %r319}320 321define <vscale x 4 x i16> @insertelt_nxv4i16_imm(<vscale x 4 x i16> %v, i16 signext %elt) {322; CHECK-LABEL: insertelt_nxv4i16_imm:323; CHECK:       # %bb.0:324; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma325; CHECK-NEXT:    vmv.s.x v9, a0326; CHECK-NEXT:    vslideup.vi v8, v9, 3327; CHECK-NEXT:    ret328  %r = insertelement <vscale x 4 x i16> %v, i16 %elt, i32 3329  ret <vscale x 4 x i16> %r330}331 332define <vscale x 4 x i16> @insertelt_nxv4i16_idx(<vscale x 4 x i16> %v, i16 signext %elt, i32 signext %idx) {333; CHECK-LABEL: insertelt_nxv4i16_idx:334; CHECK:       # %bb.0:335; CHECK-NEXT:    addi a2, a1, 1336; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma337; CHECK-NEXT:    vmv.s.x v9, a0338; CHECK-NEXT:    vsetvli zero, a2, e16, m1, tu, ma339; CHECK-NEXT:    vslideup.vx v8, v9, a1340; CHECK-NEXT:    ret341  %r = insertelement <vscale x 4 x i16> %v, i16 %elt, i32 %idx342  ret <vscale x 4 x i16> %r343}344 345define <vscale x 8 x i16> @insertelt_nxv8i16_0(<vscale x 8 x i16> %v, i16 signext %elt) {346; CHECK-LABEL: insertelt_nxv8i16_0:347; CHECK:       # %bb.0:348; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma349; CHECK-NEXT:    vmv.s.x v8, a0350; CHECK-NEXT:    ret351  %r = insertelement <vscale x 8 x i16> %v, i16 %elt, i32 0352  ret <vscale x 8 x i16> %r353}354 355define <vscale x 8 x i16> @insertelt_nxv8i16_imm(<vscale x 8 x i16> %v, i16 signext %elt) {356; CHECK-LABEL: insertelt_nxv8i16_imm:357; CHECK:       # %bb.0:358; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma359; CHECK-NEXT:    vmv.s.x v10, a0360; CHECK-NEXT:    vslideup.vi v8, v10, 3361; CHECK-NEXT:    ret362  %r = insertelement <vscale x 8 x i16> %v, i16 %elt, i32 3363  ret <vscale x 8 x i16> %r364}365 366define <vscale x 8 x i16> @insertelt_nxv8i16_idx(<vscale x 8 x i16> %v, i16 signext %elt, i32 signext %idx) {367; CHECK-LABEL: insertelt_nxv8i16_idx:368; CHECK:       # %bb.0:369; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma370; CHECK-NEXT:    vmv.s.x v10, a0371; CHECK-NEXT:    addi a0, a1, 1372; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma373; CHECK-NEXT:    vslideup.vx v8, v10, a1374; CHECK-NEXT:    ret375  %r = insertelement <vscale x 8 x i16> %v, i16 %elt, i32 %idx376  ret <vscale x 8 x i16> %r377}378 379define <vscale x 16 x i16> @insertelt_nxv16i16_0(<vscale x 16 x i16> %v, i16 signext %elt) {380; CHECK-LABEL: insertelt_nxv16i16_0:381; CHECK:       # %bb.0:382; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma383; CHECK-NEXT:    vmv.s.x v8, a0384; CHECK-NEXT:    ret385  %r = insertelement <vscale x 16 x i16> %v, i16 %elt, i32 0386  ret <vscale x 16 x i16> %r387}388 389define <vscale x 16 x i16> @insertelt_nxv16i16_imm(<vscale x 16 x i16> %v, i16 signext %elt) {390; CHECK-LABEL: insertelt_nxv16i16_imm:391; CHECK:       # %bb.0:392; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma393; CHECK-NEXT:    vmv.s.x v12, a0394; CHECK-NEXT:    vslideup.vi v8, v12, 3395; CHECK-NEXT:    ret396  %r = insertelement <vscale x 16 x i16> %v, i16 %elt, i32 3397  ret <vscale x 16 x i16> %r398}399 400define <vscale x 16 x i16> @insertelt_nxv16i16_idx(<vscale x 16 x i16> %v, i16 signext %elt, i32 signext %idx) {401; CHECK-LABEL: insertelt_nxv16i16_idx:402; CHECK:       # %bb.0:403; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma404; CHECK-NEXT:    vmv.s.x v12, a0405; CHECK-NEXT:    addi a0, a1, 1406; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma407; CHECK-NEXT:    vslideup.vx v8, v12, a1408; CHECK-NEXT:    ret409  %r = insertelement <vscale x 16 x i16> %v, i16 %elt, i32 %idx410  ret <vscale x 16 x i16> %r411}412 413define <vscale x 32 x i16> @insertelt_nxv32i16_0(<vscale x 32 x i16> %v, i16 signext %elt) {414; CHECK-LABEL: insertelt_nxv32i16_0:415; CHECK:       # %bb.0:416; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma417; CHECK-NEXT:    vmv.s.x v8, a0418; CHECK-NEXT:    ret419  %r = insertelement <vscale x 32 x i16> %v, i16 %elt, i32 0420  ret <vscale x 32 x i16> %r421}422 423define <vscale x 32 x i16> @insertelt_nxv32i16_imm(<vscale x 32 x i16> %v, i16 signext %elt) {424; CHECK-LABEL: insertelt_nxv32i16_imm:425; CHECK:       # %bb.0:426; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma427; CHECK-NEXT:    vmv.s.x v16, a0428; CHECK-NEXT:    vslideup.vi v8, v16, 3429; CHECK-NEXT:    ret430  %r = insertelement <vscale x 32 x i16> %v, i16 %elt, i32 3431  ret <vscale x 32 x i16> %r432}433 434define <vscale x 32 x i16> @insertelt_nxv32i16_idx(<vscale x 32 x i16> %v, i16 signext %elt, i32 signext %idx) {435; CHECK-LABEL: insertelt_nxv32i16_idx:436; CHECK:       # %bb.0:437; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma438; CHECK-NEXT:    vmv.s.x v16, a0439; CHECK-NEXT:    addi a0, a1, 1440; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, ma441; CHECK-NEXT:    vslideup.vx v8, v16, a1442; CHECK-NEXT:    ret443  %r = insertelement <vscale x 32 x i16> %v, i16 %elt, i32 %idx444  ret <vscale x 32 x i16> %r445}446 447define <vscale x 1 x i32> @insertelt_nxv1i32_0(<vscale x 1 x i32> %v, i32 %elt) {448; CHECK-LABEL: insertelt_nxv1i32_0:449; CHECK:       # %bb.0:450; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma451; CHECK-NEXT:    vmv.s.x v8, a0452; CHECK-NEXT:    ret453  %r = insertelement <vscale x 1 x i32> %v, i32 %elt, i32 0454  ret <vscale x 1 x i32> %r455}456 457define <vscale x 1 x i32> @insertelt_nxv1i32_imm(<vscale x 1 x i32> %v, i32 %elt) {458; CHECK-LABEL: insertelt_nxv1i32_imm:459; CHECK:       # %bb.0:460; CHECK-NEXT:    vsetivli zero, 4, e32, mf2, tu, ma461; CHECK-NEXT:    vmv.s.x v9, a0462; CHECK-NEXT:    vslideup.vi v8, v9, 3463; CHECK-NEXT:    ret464  %r = insertelement <vscale x 1 x i32> %v, i32 %elt, i32 3465  ret <vscale x 1 x i32> %r466}467 468define <vscale x 1 x i32> @insertelt_nxv1i32_idx(<vscale x 1 x i32> %v, i32 %elt, i32 %idx) {469; CHECK-LABEL: insertelt_nxv1i32_idx:470; CHECK:       # %bb.0:471; CHECK-NEXT:    addi a2, a1, 1472; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma473; CHECK-NEXT:    vmv.s.x v9, a0474; CHECK-NEXT:    vsetvli zero, a2, e32, mf2, tu, ma475; CHECK-NEXT:    vslideup.vx v8, v9, a1476; CHECK-NEXT:    ret477  %r = insertelement <vscale x 1 x i32> %v, i32 %elt, i32 %idx478  ret <vscale x 1 x i32> %r479}480 481define <vscale x 2 x i32> @insertelt_nxv2i32_0(<vscale x 2 x i32> %v, i32 %elt) {482; CHECK-LABEL: insertelt_nxv2i32_0:483; CHECK:       # %bb.0:484; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma485; CHECK-NEXT:    vmv.s.x v8, a0486; CHECK-NEXT:    ret487  %r = insertelement <vscale x 2 x i32> %v, i32 %elt, i32 0488  ret <vscale x 2 x i32> %r489}490 491define <vscale x 2 x i32> @insertelt_nxv2i32_imm(<vscale x 2 x i32> %v, i32 %elt) {492; CHECK-LABEL: insertelt_nxv2i32_imm:493; CHECK:       # %bb.0:494; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma495; CHECK-NEXT:    vmv.s.x v9, a0496; CHECK-NEXT:    vslideup.vi v8, v9, 3497; CHECK-NEXT:    ret498  %r = insertelement <vscale x 2 x i32> %v, i32 %elt, i32 3499  ret <vscale x 2 x i32> %r500}501 502define <vscale x 2 x i32> @insertelt_nxv2i32_idx(<vscale x 2 x i32> %v, i32 %elt, i32 %idx) {503; CHECK-LABEL: insertelt_nxv2i32_idx:504; CHECK:       # %bb.0:505; CHECK-NEXT:    addi a2, a1, 1506; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma507; CHECK-NEXT:    vmv.s.x v9, a0508; CHECK-NEXT:    vsetvli zero, a2, e32, m1, tu, ma509; CHECK-NEXT:    vslideup.vx v8, v9, a1510; CHECK-NEXT:    ret511  %r = insertelement <vscale x 2 x i32> %v, i32 %elt, i32 %idx512  ret <vscale x 2 x i32> %r513}514 515define <vscale x 4 x i32> @insertelt_nxv4i32_0(<vscale x 4 x i32> %v, i32 %elt) {516; CHECK-LABEL: insertelt_nxv4i32_0:517; CHECK:       # %bb.0:518; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma519; CHECK-NEXT:    vmv.s.x v8, a0520; CHECK-NEXT:    ret521  %r = insertelement <vscale x 4 x i32> %v, i32 %elt, i32 0522  ret <vscale x 4 x i32> %r523}524 525define <vscale x 4 x i32> @insertelt_nxv4i32_imm(<vscale x 4 x i32> %v, i32 %elt) {526; CHECK-LABEL: insertelt_nxv4i32_imm:527; CHECK:       # %bb.0:528; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma529; CHECK-NEXT:    vmv.s.x v10, a0530; CHECK-NEXT:    vslideup.vi v8, v10, 3531; CHECK-NEXT:    ret532  %r = insertelement <vscale x 4 x i32> %v, i32 %elt, i32 3533  ret <vscale x 4 x i32> %r534}535 536define <vscale x 4 x i32> @insertelt_nxv4i32_idx(<vscale x 4 x i32> %v, i32 %elt, i32 %idx) {537; CHECK-LABEL: insertelt_nxv4i32_idx:538; CHECK:       # %bb.0:539; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma540; CHECK-NEXT:    vmv.s.x v10, a0541; CHECK-NEXT:    addi a0, a1, 1542; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma543; CHECK-NEXT:    vslideup.vx v8, v10, a1544; CHECK-NEXT:    ret545  %r = insertelement <vscale x 4 x i32> %v, i32 %elt, i32 %idx546  ret <vscale x 4 x i32> %r547}548 549define <vscale x 8 x i32> @insertelt_nxv8i32_0(<vscale x 8 x i32> %v, i32 %elt) {550; CHECK-LABEL: insertelt_nxv8i32_0:551; CHECK:       # %bb.0:552; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma553; CHECK-NEXT:    vmv.s.x v8, a0554; CHECK-NEXT:    ret555  %r = insertelement <vscale x 8 x i32> %v, i32 %elt, i32 0556  ret <vscale x 8 x i32> %r557}558 559define <vscale x 8 x i32> @insertelt_nxv8i32_imm(<vscale x 8 x i32> %v, i32 %elt) {560; CHECK-LABEL: insertelt_nxv8i32_imm:561; CHECK:       # %bb.0:562; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma563; CHECK-NEXT:    vmv.s.x v12, a0564; CHECK-NEXT:    vslideup.vi v8, v12, 3565; CHECK-NEXT:    ret566  %r = insertelement <vscale x 8 x i32> %v, i32 %elt, i32 3567  ret <vscale x 8 x i32> %r568}569 570define <vscale x 8 x i32> @insertelt_nxv8i32_idx(<vscale x 8 x i32> %v, i32 %elt, i32 %idx) {571; CHECK-LABEL: insertelt_nxv8i32_idx:572; CHECK:       # %bb.0:573; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma574; CHECK-NEXT:    vmv.s.x v12, a0575; CHECK-NEXT:    addi a0, a1, 1576; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma577; CHECK-NEXT:    vslideup.vx v8, v12, a1578; CHECK-NEXT:    ret579  %r = insertelement <vscale x 8 x i32> %v, i32 %elt, i32 %idx580  ret <vscale x 8 x i32> %r581}582 583define <vscale x 16 x i32> @insertelt_nxv16i32_0(<vscale x 16 x i32> %v, i32 %elt) {584; CHECK-LABEL: insertelt_nxv16i32_0:585; CHECK:       # %bb.0:586; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma587; CHECK-NEXT:    vmv.s.x v8, a0588; CHECK-NEXT:    ret589  %r = insertelement <vscale x 16 x i32> %v, i32 %elt, i32 0590  ret <vscale x 16 x i32> %r591}592 593define <vscale x 16 x i32> @insertelt_nxv16i32_imm(<vscale x 16 x i32> %v, i32 %elt) {594; CHECK-LABEL: insertelt_nxv16i32_imm:595; CHECK:       # %bb.0:596; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma597; CHECK-NEXT:    vmv.s.x v16, a0598; CHECK-NEXT:    vslideup.vi v8, v16, 3599; CHECK-NEXT:    ret600  %r = insertelement <vscale x 16 x i32> %v, i32 %elt, i32 3601  ret <vscale x 16 x i32> %r602}603 604define <vscale x 16 x i32> @insertelt_nxv16i32_idx(<vscale x 16 x i32> %v, i32 %elt, i32 %idx) {605; CHECK-LABEL: insertelt_nxv16i32_idx:606; CHECK:       # %bb.0:607; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma608; CHECK-NEXT:    vmv.s.x v16, a0609; CHECK-NEXT:    addi a0, a1, 1610; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, ma611; CHECK-NEXT:    vslideup.vx v8, v16, a1612; CHECK-NEXT:    ret613  %r = insertelement <vscale x 16 x i32> %v, i32 %elt, i32 %idx614  ret <vscale x 16 x i32> %r615}616 617define <vscale x 1 x i64> @insertelt_nxv1i64_0(<vscale x 1 x i64> %v, i64 %elt) {618; CHECK-LABEL: insertelt_nxv1i64_0:619; CHECK:       # %bb.0:620; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, ma621; CHECK-NEXT:    vslide1down.vx v8, v8, a0622; CHECK-NEXT:    vslide1down.vx v8, v8, a1623; CHECK-NEXT:    ret624  %r = insertelement <vscale x 1 x i64> %v, i64 %elt, i32 0625  ret <vscale x 1 x i64> %r626}627 628define <vscale x 1 x i64> @insertelt_nxv1i64_imm(<vscale x 1 x i64> %v, i64 %elt) {629; CHECK-LABEL: insertelt_nxv1i64_imm:630; CHECK:       # %bb.0:631; CHECK-NEXT:    vsetivli zero, 2, e32, m1, ta, ma632; CHECK-NEXT:    vslide1down.vx v9, v8, a0633; CHECK-NEXT:    vslide1down.vx v9, v9, a1634; CHECK-NEXT:    vsetivli zero, 4, e64, m1, tu, ma635; CHECK-NEXT:    vslideup.vi v8, v9, 3636; CHECK-NEXT:    ret637  %r = insertelement <vscale x 1 x i64> %v, i64 %elt, i32 3638  ret <vscale x 1 x i64> %r639}640 641define <vscale x 1 x i64> @insertelt_nxv1i64_idx(<vscale x 1 x i64> %v, i64 %elt, i32 %idx) {642; CHECK-LABEL: insertelt_nxv1i64_idx:643; CHECK:       # %bb.0:644; CHECK-NEXT:    vsetivli zero, 2, e32, m1, ta, ma645; CHECK-NEXT:    vslide1down.vx v9, v8, a0646; CHECK-NEXT:    vslide1down.vx v9, v9, a1647; CHECK-NEXT:    addi a0, a2, 1648; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma649; CHECK-NEXT:    vslideup.vx v8, v9, a2650; CHECK-NEXT:    ret651  %r = insertelement <vscale x 1 x i64> %v, i64 %elt, i32 %idx652  ret <vscale x 1 x i64> %r653}654 655define <vscale x 2 x i64> @insertelt_nxv2i64_0(<vscale x 2 x i64> %v, i64 %elt) {656; CHECK-LABEL: insertelt_nxv2i64_0:657; CHECK:       # %bb.0:658; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, ma659; CHECK-NEXT:    vslide1down.vx v8, v8, a0660; CHECK-NEXT:    vslide1down.vx v8, v8, a1661; CHECK-NEXT:    ret662  %r = insertelement <vscale x 2 x i64> %v, i64 %elt, i32 0663  ret <vscale x 2 x i64> %r664}665 666define <vscale x 2 x i64> @insertelt_nxv2i64_imm(<vscale x 2 x i64> %v, i64 %elt) {667; CHECK-LABEL: insertelt_nxv2i64_imm:668; CHECK:       # %bb.0:669; CHECK-NEXT:    vsetivli zero, 2, e32, m2, ta, ma670; CHECK-NEXT:    vslide1down.vx v10, v8, a0671; CHECK-NEXT:    vslide1down.vx v10, v10, a1672; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma673; CHECK-NEXT:    vslideup.vi v8, v10, 3674; CHECK-NEXT:    ret675  %r = insertelement <vscale x 2 x i64> %v, i64 %elt, i32 3676  ret <vscale x 2 x i64> %r677}678 679define <vscale x 2 x i64> @insertelt_nxv2i64_idx(<vscale x 2 x i64> %v, i64 %elt, i32 %idx) {680; CHECK-LABEL: insertelt_nxv2i64_idx:681; CHECK:       # %bb.0:682; CHECK-NEXT:    vsetivli zero, 2, e32, m2, ta, ma683; CHECK-NEXT:    vslide1down.vx v10, v8, a0684; CHECK-NEXT:    vslide1down.vx v10, v10, a1685; CHECK-NEXT:    addi a0, a2, 1686; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma687; CHECK-NEXT:    vslideup.vx v8, v10, a2688; CHECK-NEXT:    ret689  %r = insertelement <vscale x 2 x i64> %v, i64 %elt, i32 %idx690  ret <vscale x 2 x i64> %r691}692 693define <vscale x 4 x i64> @insertelt_nxv4i64_0(<vscale x 4 x i64> %v, i64 %elt) {694; CHECK-LABEL: insertelt_nxv4i64_0:695; CHECK:       # %bb.0:696; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, ma697; CHECK-NEXT:    vslide1down.vx v8, v8, a0698; CHECK-NEXT:    vslide1down.vx v8, v8, a1699; CHECK-NEXT:    ret700  %r = insertelement <vscale x 4 x i64> %v, i64 %elt, i32 0701  ret <vscale x 4 x i64> %r702}703 704define <vscale x 4 x i64> @insertelt_nxv4i64_imm(<vscale x 4 x i64> %v, i64 %elt) {705; CHECK-LABEL: insertelt_nxv4i64_imm:706; CHECK:       # %bb.0:707; CHECK-NEXT:    vsetivli zero, 2, e32, m2, ta, ma708; CHECK-NEXT:    vslide1down.vx v12, v8, a0709; CHECK-NEXT:    vslide1down.vx v12, v12, a1710; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma711; CHECK-NEXT:    vslideup.vi v8, v12, 3712; CHECK-NEXT:    ret713  %r = insertelement <vscale x 4 x i64> %v, i64 %elt, i32 3714  ret <vscale x 4 x i64> %r715}716 717define <vscale x 4 x i64> @insertelt_nxv4i64_idx(<vscale x 4 x i64> %v, i64 %elt, i32 %idx) {718; CHECK-LABEL: insertelt_nxv4i64_idx:719; CHECK:       # %bb.0:720; CHECK-NEXT:    vsetivli zero, 2, e32, m4, ta, ma721; CHECK-NEXT:    vslide1down.vx v12, v8, a0722; CHECK-NEXT:    vslide1down.vx v12, v12, a1723; CHECK-NEXT:    addi a0, a2, 1724; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma725; CHECK-NEXT:    vslideup.vx v8, v12, a2726; CHECK-NEXT:    ret727  %r = insertelement <vscale x 4 x i64> %v, i64 %elt, i32 %idx728  ret <vscale x 4 x i64> %r729}730 731define <vscale x 8 x i64> @insertelt_nxv8i64_0(<vscale x 8 x i64> %v, i64 %elt) {732; CHECK-LABEL: insertelt_nxv8i64_0:733; CHECK:       # %bb.0:734; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, ma735; CHECK-NEXT:    vslide1down.vx v8, v8, a0736; CHECK-NEXT:    vslide1down.vx v8, v8, a1737; CHECK-NEXT:    ret738  %r = insertelement <vscale x 8 x i64> %v, i64 %elt, i32 0739  ret <vscale x 8 x i64> %r740}741 742define <vscale x 8 x i64> @insertelt_nxv8i64_imm(<vscale x 8 x i64> %v, i64 %elt) {743; CHECK-LABEL: insertelt_nxv8i64_imm:744; CHECK:       # %bb.0:745; CHECK-NEXT:    vsetivli zero, 2, e32, m2, ta, ma746; CHECK-NEXT:    vslide1down.vx v16, v8, a0747; CHECK-NEXT:    vslide1down.vx v16, v16, a1748; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma749; CHECK-NEXT:    vslideup.vi v8, v16, 3750; CHECK-NEXT:    ret751  %r = insertelement <vscale x 8 x i64> %v, i64 %elt, i32 3752  ret <vscale x 8 x i64> %r753}754 755define <vscale x 8 x i64> @insertelt_nxv8i64_idx(<vscale x 8 x i64> %v, i64 %elt, i32 %idx) {756; CHECK-LABEL: insertelt_nxv8i64_idx:757; CHECK:       # %bb.0:758; CHECK-NEXT:    vsetivli zero, 2, e32, m8, ta, ma759; CHECK-NEXT:    vslide1down.vx v16, v8, a0760; CHECK-NEXT:    vslide1down.vx v16, v16, a1761; CHECK-NEXT:    addi a0, a2, 1762; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma763; CHECK-NEXT:    vslideup.vx v8, v16, a2764; CHECK-NEXT:    ret765  %r = insertelement <vscale x 8 x i64> %v, i64 %elt, i32 %idx766  ret <vscale x 8 x i64> %r767}768 769; Extra tests to check lowering of constant values770define <vscale x 2 x i64> @insertelt_nxv2i64_0_c10(<vscale x 2 x i64> %v) {771; CHECK-LABEL: insertelt_nxv2i64_0_c10:772; CHECK:       # %bb.0:773; CHECK-NEXT:    li a0, 10774; CHECK-NEXT:    vsetvli a1, zero, e64, m1, tu, ma775; CHECK-NEXT:    vmv.s.x v8, a0776; CHECK-NEXT:    ret777  %r = insertelement <vscale x 2 x i64> %v, i64 10, i32 0778  ret <vscale x 2 x i64> %r779}780 781define <vscale x 2 x i64> @insertelt_nxv2i64_imm_c10(<vscale x 2 x i64> %v) {782; CHECK-LABEL: insertelt_nxv2i64_imm_c10:783; CHECK:       # %bb.0:784; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma785; CHECK-NEXT:    vmv.v.i v10, 10786; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma787; CHECK-NEXT:    vslideup.vi v8, v10, 3788; CHECK-NEXT:    ret789  %r = insertelement <vscale x 2 x i64> %v, i64 10, i32 3790  ret <vscale x 2 x i64> %r791}792 793define <vscale x 2 x i64> @insertelt_nxv2i64_idx_c10(<vscale x 2 x i64> %v, i32 %idx) {794; CHECK-LABEL: insertelt_nxv2i64_idx_c10:795; CHECK:       # %bb.0:796; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma797; CHECK-NEXT:    vmv.v.i v10, 10798; CHECK-NEXT:    addi a1, a0, 1799; CHECK-NEXT:    vsetvli zero, a1, e64, m2, tu, ma800; CHECK-NEXT:    vslideup.vx v8, v10, a0801; CHECK-NEXT:    ret802  %r = insertelement <vscale x 2 x i64> %v, i64 10, i32 %idx803  ret <vscale x 2 x i64> %r804}805 806define <vscale x 2 x i64> @insertelt_nxv2i64_0_cn1(<vscale x 2 x i64> %v) {807; CHECK-LABEL: insertelt_nxv2i64_0_cn1:808; CHECK:       # %bb.0:809; CHECK-NEXT:    li a0, -1810; CHECK-NEXT:    vsetvli a1, zero, e64, m1, tu, ma811; CHECK-NEXT:    vmv.s.x v8, a0812; CHECK-NEXT:    ret813  %r = insertelement <vscale x 2 x i64> %v, i64 -1, i32 0814  ret <vscale x 2 x i64> %r815}816 817define <vscale x 2 x i64> @insertelt_nxv2i64_imm_cn1(<vscale x 2 x i64> %v) {818; CHECK-LABEL: insertelt_nxv2i64_imm_cn1:819; CHECK:       # %bb.0:820; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma821; CHECK-NEXT:    vmv.v.i v10, -1822; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma823; CHECK-NEXT:    vslideup.vi v8, v10, 3824; CHECK-NEXT:    ret825  %r = insertelement <vscale x 2 x i64> %v, i64 -1, i32 3826  ret <vscale x 2 x i64> %r827}828 829define <vscale x 2 x i64> @insertelt_nxv2i64_idx_cn1(<vscale x 2 x i64> %v, i32 %idx) {830; CHECK-LABEL: insertelt_nxv2i64_idx_cn1:831; CHECK:       # %bb.0:832; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma833; CHECK-NEXT:    vmv.v.i v10, -1834; CHECK-NEXT:    addi a1, a0, 1835; CHECK-NEXT:    vsetvli zero, a1, e64, m2, tu, ma836; CHECK-NEXT:    vslideup.vx v8, v10, a0837; CHECK-NEXT:    ret838  %r = insertelement <vscale x 2 x i64> %v, i64 -1, i32 %idx839  ret <vscale x 2 x i64> %r840}841