brintos

brintos / llvm-project-archived public Read only

0
0
Text · 121.8 KiB · 5567310 Raw
2468 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=riscv32 -mattr=+v,m -O2 | FileCheck -check-prefixes=CHECK,RV32 %s3; RUN: llc < %s -mtriple=riscv64 -mattr=+v,m -O2 | FileCheck -check-prefixes=CHECK,RV64 %s4 5; ------------------------------------------------------------------------------6; Loads7; ------------------------------------------------------------------------------8 9; FIXME: This should be widened to a vlseg2 of <4 x i32> with VL set to 310define {<3 x i32>, <3 x i32>} @load_factor2_v3(ptr %ptr) {11; CHECK-LABEL: load_factor2_v3:12; CHECK:       # %bb.0:13; CHECK-NEXT:    vsetivli zero, 6, e32, m2, ta, ma14; CHECK-NEXT:    vle32.v v10, (a0)15; CHECK-NEXT:    li a0, 3216; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma17; CHECK-NEXT:    vnsrl.wx v9, v10, a018; CHECK-NEXT:    vnsrl.wi v8, v10, 019; CHECK-NEXT:    ret20  %interleaved.vec = load <6 x i32>, ptr %ptr21  %v0 = shufflevector <6 x i32> %interleaved.vec, <6 x i32> poison, <3 x i32> <i32 0, i32 2, i32 4>22  %v1 = shufflevector <6 x i32> %interleaved.vec, <6 x i32> poison, <3 x i32> <i32 1, i32 3, i32 5>23  %res0 = insertvalue {<3 x i32>, <3 x i32>} poison, <3 x i32> %v0, 024  %res1 = insertvalue {<3 x i32>, <3 x i32>} %res0, <3 x i32> %v1, 125  ret {<3 x i32>, <3 x i32>} %res126}27 28define {<4 x i32>, <4 x i32>} @load_factor2(ptr %ptr) {29; CHECK-LABEL: load_factor2:30; CHECK:       # %bb.0:31; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma32; CHECK-NEXT:    vlseg2e32.v v8, (a0)33; CHECK-NEXT:    ret34  %interleaved.vec = load <8 x i32>, ptr %ptr35  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>36  %v1 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>37  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 038  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 139  ret {<4 x i32>, <4 x i32>} %res140}41 42 43define {<4 x i32>, <4 x i32>, <4 x i32>} @load_factor3(ptr %ptr) {44; CHECK-LABEL: load_factor3:45; CHECK:       # %bb.0:46; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma47; CHECK-NEXT:    vlseg3e32.v v8, (a0)48; CHECK-NEXT:    ret49  %interleaved.vec = load <12 x i32>, ptr %ptr50  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>51  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>52  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>53  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 054  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 155  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 256  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res257}58 59define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @load_factor4(ptr %ptr) {60; CHECK-LABEL: load_factor4:61; CHECK:       # %bb.0:62; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma63; CHECK-NEXT:    vlseg4e32.v v8, (a0)64; CHECK-NEXT:    ret65  %interleaved.vec = load <16 x i32>, ptr %ptr66  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>67  %v1 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>68  %v2 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>69  %v3 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>70  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 071  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 172  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 273  %res3 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res2, <4 x i32> %v3, 374  ret {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res375}76 77define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @load_factor5(ptr %ptr) {78; CHECK-LABEL: load_factor5:79; CHECK:       # %bb.0:80; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma81; CHECK-NEXT:    vlseg5e32.v v8, (a0)82; CHECK-NEXT:    ret83  %interleaved.vec = load <20 x i32>, ptr %ptr84  %v0 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 0, i32 5, i32 10, i32 15>85  %v1 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 1, i32 6, i32 11, i32 16>86  %v2 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 2, i32 7, i32 12, i32 17>87  %v3 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 3, i32 8, i32 13, i32 18>88  %v4 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 4, i32 9, i32 14, i32 19>89  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 090  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 191  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 292  %res3 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res2, <4 x i32> %v3, 393  %res4 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res3, <4 x i32> %v4, 494  ret {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res495}96 97define {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} @load_factor6(ptr %ptr) {98; CHECK-LABEL: load_factor6:99; CHECK:       # %bb.0:100; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma101; CHECK-NEXT:    vlseg6e16.v v8, (a0)102; CHECK-NEXT:    ret103  %interleaved.vec = load <12 x i16>, ptr %ptr104  %v0 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 0, i32 6>105  %v1 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 1, i32 7>106  %v2 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 2, i32 8>107  %v3 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 3, i32 9>108  %v4 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 4, i32 10>109  %v5 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 5, i32 11>110  %res0 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} poison, <2 x i16> %v0, 0111  %res1 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res0, <2 x i16> %v1, 1112  %res2 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res1, <2 x i16> %v2, 2113  %res3 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res2, <2 x i16> %v3, 3114  %res4 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res3, <2 x i16> %v4, 4115  %res5 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res4, <2 x i16> %v5, 5116  ret {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res5117}118 119define {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} @load_factor7(ptr %ptr) {120; CHECK-LABEL: load_factor7:121; CHECK:       # %bb.0:122; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma123; CHECK-NEXT:    vlseg7e16.v v8, (a0)124; CHECK-NEXT:    ret125  %interleaved.vec = load <14 x i16>, ptr %ptr126  %v0 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 0, i32 7>127  %v1 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 1, i32 8>128  %v2 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 2, i32 9>129  %v3 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 3, i32 10>130  %v4 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 4, i32 11>131  %v5 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 5, i32 12>132  %v6 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 6, i32 13>133  %res0 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} poison, <2 x i16> %v0, 0134  %res1 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res0, <2 x i16> %v1, 1135  %res2 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res1, <2 x i16> %v2, 2136  %res3 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res2, <2 x i16> %v3, 3137  %res4 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res3, <2 x i16> %v4, 4138  %res5 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res4, <2 x i16> %v5, 5139  %res6 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res5, <2 x i16> %v6, 6140  ret {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res6141}142 143define {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} @load_factor8(ptr %ptr) {144; CHECK-LABEL: load_factor8:145; CHECK:       # %bb.0:146; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma147; CHECK-NEXT:    vlseg8e16.v v8, (a0)148; CHECK-NEXT:    ret149  %interleaved.vec = load <16 x i16>, ptr %ptr150  %v0 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 0, i32 8>151  %v1 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 1, i32 9>152  %v2 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 2, i32 10>153  %v3 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 3, i32 11>154  %v4 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 4, i32 12>155  %v5 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 5, i32 13>156  %v6 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 6, i32 14>157  %v7 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 7, i32 15>158  %res0 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} poison, <2 x i16> %v0, 0159  %res1 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res0, <2 x i16> %v1, 1160  %res2 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res1, <2 x i16> %v2, 2161  %res3 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res2, <2 x i16> %v3, 3162  %res4 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res3, <2 x i16> %v4, 4163  %res5 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res4, <2 x i16> %v5, 5164  %res6 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res5, <2 x i16> %v6, 6165  %res7 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res6, <2 x i16> %v7, 7166  ret {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res7167}168 169define {<4 x i32>, <4 x i32>} @vpload_factor2(ptr %ptr) {170; CHECK-LABEL: vpload_factor2:171; CHECK:       # %bb.0:172; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma173; CHECK-NEXT:    vlseg2e32.v v8, (a0)174; CHECK-NEXT:    ret175  %interleaved.vec = tail call <8 x i32> @llvm.vp.load.v8i32.p0(ptr %ptr, <8 x i1> splat (i1 true), i32 8)176  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>177  %v1 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>178  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0179  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1180  ret {<4 x i32>, <4 x i32>} %res1181}182 183define {<4 x i32>, <4 x i32>} @vpload_factor2_interleaved_mask_intrinsic(ptr %ptr, <4 x i1> %m) {184; CHECK-LABEL: vpload_factor2_interleaved_mask_intrinsic:185; CHECK:       # %bb.0:186; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma187; CHECK-NEXT:    vlseg2e32.v v8, (a0), v0.t188; CHECK-NEXT:    ret189  %interleaved.mask = call <8 x i1> @llvm.vector.interleave2(<4 x i1> %m, <4 x i1> %m)190  %interleaved.vec = tail call <8 x i32> @llvm.vp.load.v8i32.p0(ptr %ptr, <8 x i1> %interleaved.mask, i32 8)191  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>192  %v1 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>193  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0194  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1195  ret {<4 x i32>, <4 x i32>} %res1196}197 198; mask = %m, skip the last two fields.199define {<2 x i32>, <2 x i32>} @vpload_factor4_interleaved_mask_intrinsic_skip_fields(ptr %ptr, <2 x i1> %m) {200; CHECK-LABEL: vpload_factor4_interleaved_mask_intrinsic_skip_fields:201; CHECK:       # %bb.0:202; CHECK-NEXT:    li a1, 16203; CHECK-NEXT:    vsetivli zero, 4, e32, mf2, ta, ma204; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1, v0.t205; CHECK-NEXT:    ret206  %interleaved.mask = call <8 x i1> @llvm.vector.interleave4(<2 x i1> %m, <2 x i1> %m, <2 x i1> splat (i1 false), <2 x i1> splat (i1 false))207  %interleaved.vec = tail call <8 x i32> @llvm.vp.load.v8i32.p0(ptr %ptr, <8 x i1> %interleaved.mask, i32 8)208  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <2 x i32> <i32 0, i32 4>209  %v1 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <2 x i32> <i32 1, i32 5>210  %res0 = insertvalue {<2 x i32>, <2 x i32>} poison, <2 x i32> %v0, 0211  %res1 = insertvalue {<2 x i32>, <2 x i32>} %res0, <2 x i32> %v1, 1212  ret {<2 x i32>, <2 x i32>} %res1213}214 215define {<4 x i32>, <4 x i32>} @vpload_factor2_interleaved_mask_shuffle(ptr %ptr, <4 x i1> %m) {216; CHECK-LABEL: vpload_factor2_interleaved_mask_shuffle:217; CHECK:       # %bb.0:218; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma219; CHECK-NEXT:    vlseg2e32.v v8, (a0), v0.t220; CHECK-NEXT:    ret221  %interleaved.mask = shufflevector <4 x i1> %m, <4 x i1> poison, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>222  %interleaved.vec = tail call <8 x i32> @llvm.vp.load.v8i32.p0(ptr %ptr, <8 x i1> %interleaved.mask, i32 8)223  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>224  %v1 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>225  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0226  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1227  ret {<4 x i32>, <4 x i32>} %res1228}229 230define {<4 x i32>, <4 x i32>} @vpload_factor2_interleaved_mask_shuffle2(ptr %ptr, <2 x i1> %m) {231; CHECK-LABEL: vpload_factor2_interleaved_mask_shuffle2:232; CHECK:       # %bb.0:233; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma234; CHECK-NEXT:    vmv.v.i v8, 0235; CHECK-NEXT:    li a1, -1236; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0237; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma238; CHECK-NEXT:    vwaddu.vv v9, v8, v8239; CHECK-NEXT:    vwmaccu.vx v9, a1, v8240; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma241; CHECK-NEXT:    vmsne.vi v0, v9, 0242; CHECK-NEXT:    vle32.v v10, (a0), v0.t243; CHECK-NEXT:    li a0, 32244; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma245; CHECK-NEXT:    vnsrl.wi v8, v10, 0246; CHECK-NEXT:    vnsrl.wx v9, v10, a0247; CHECK-NEXT:    ret248  %interleaved.mask = shufflevector <2 x i1> %m, <2 x i1> poison, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>249  %interleaved.vec = tail call <8 x i32> @llvm.vp.load.v8i32.p0(ptr %ptr, <8 x i1> %interleaved.mask, i32 4)250  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>251  %v1 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>252  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0253  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1254  ret {<4 x i32>, <4 x i32>} %res1255}256 257define {<4 x i32>, <4 x i32>, <4 x i32>} @vpload_factor3(ptr %ptr) {258; CHECK-LABEL: vpload_factor3:259; CHECK:       # %bb.0:260; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma261; CHECK-NEXT:    vlseg3e32.v v8, (a0)262; CHECK-NEXT:    ret263  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> splat (i1 true), i32 12)264  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>265  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>266  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>267  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0268  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1269  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2270  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res2271}272 273; We only extract some of the fields.274define {<4 x i32>, <4 x i32>} @vpload_factor3_partial(ptr %ptr) {275; CHECK-LABEL: vpload_factor3_partial:276; CHECK:       # %bb.0:277; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma278; CHECK-NEXT:    vlseg3e32.v v7, (a0)279; CHECK-NEXT:    vmv1r.v v8, v7280; CHECK-NEXT:    ret281  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> splat (i1 true), i32 12)282  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>283  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>284  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0285  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v2, 1286  ret {<4 x i32>, <4 x i32>} %res1287}288 289; Load a larger vector but only deinterleave a subset of the elements.290define {<4 x i32>, <4 x i32>, <4 x i32>} @vpload_factor3_v16i32(ptr %ptr) {291; CHECK-LABEL: vpload_factor3_v16i32:292; CHECK:       # %bb.0:293; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma294; CHECK-NEXT:    vlseg3e32.v v8, (a0)295; CHECK-NEXT:    ret296  %interleaved.vec = tail call <16 x i32> @llvm.vp.load.v16i32.p0(ptr %ptr, <16 x i1> <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1>, i32 12)297  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>298  %v1 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>299  %v2 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>300  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0301  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1302  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2303  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res2304}305 306; Make sure the mask is propagated.307define {<4 x i32>, <4 x i32>, <4 x i32>} @vpload_factor3_mask(ptr %ptr) {308; CHECK-LABEL: vpload_factor3_mask:309; CHECK:       # %bb.0:310; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma311; CHECK-NEXT:    vmv.v.i v0, 10312; CHECK-NEXT:    vlseg3e32.v v8, (a0), v0.t313; CHECK-NEXT:    ret314  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> <i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1>, i32 12)315  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>316  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>317  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>318  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0319  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1320  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2321  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res2322}323 324; Poison/poison in the shuffle mask shouldn't affect anything.325define {<4 x i32>, <4 x i32>, <4 x i32>} @vpload_factor3_poison_shufflemask(ptr %ptr) {326; CHECK-LABEL: vpload_factor3_poison_shufflemask:327; CHECK:       # %bb.0:328; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma329; CHECK-NEXT:    vmv.v.i v0, 10330; CHECK-NEXT:    vlseg3e32.v v8, (a0), v0.t331; CHECK-NEXT:    ret332  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> <i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1>, i32 12)333  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>334  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 poison, i32 10>335  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>336  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0337  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1338  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2339  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res2340}341 342define {<4 x i32>, <4 x i32>} @vpload_factor3_skip_fields(ptr %ptr) {343  ; mask = 1111, skip the last field.344; CHECK-LABEL: vpload_factor3_skip_fields:345; CHECK:       # %bb.0:346; CHECK-NEXT:    li a1, 12347; CHECK-NEXT:    vsetivli zero, 6, e32, m1, ta, ma348; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1349; CHECK-NEXT:    ret350  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> <i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0>, i32 12)351  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>352  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 poison, i32 10>353  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>354  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0355  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1356  ret {<4 x i32>, <4 x i32>} %res1357}358 359define {<4 x i32>, <4 x i32>} @vpload_factor3_mask_skip_fields(ptr %ptr) {360  ; mask = 0101, skip the last field.361; CHECK-LABEL: vpload_factor3_mask_skip_fields:362; CHECK:       # %bb.0:363; CHECK-NEXT:    vsetivli zero, 6, e32, m1, ta, ma364; CHECK-NEXT:    vmv.v.i v0, 10365; CHECK-NEXT:    li a1, 12366; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1, v0.t367; CHECK-NEXT:    ret368  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> <i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0>, i32 12)369  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>370  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 poison, i32 10>371  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>372  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0373  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1374  ret {<4 x i32>, <4 x i32>} %res1375}376 377define {<4 x i32>, <4 x i32>} @vpload_factor3_combined_mask_skip_field(ptr %ptr, <4 x i1> %mask) {378; CHECK-LABEL: vpload_factor3_combined_mask_skip_field:379; CHECK:       # %bb.0:380; CHECK-NEXT:    li a1, 12381; CHECK-NEXT:    vsetivli zero, 6, e32, m1, ta, ma382; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1, v0.t383; CHECK-NEXT:    ret384  %interleaved.mask = shufflevector <4 x i1> %mask, <4 x i1> poison, <12 x i32> <i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3>385  %combined = and <12 x i1> %interleaved.mask, <i1 true, i1 true, i1 false, i1 true, i1 true, i1 false, i1 true, i1 true, i1 false, i1 true, i1 true, i1 false>386  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> %combined, i32 12)387  ; mask = %mask, skip the last field388  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>389  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>390  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0391  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1392  ret {<4 x i32>, <4 x i32>} %res1393}394 395define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @vpload_factor4(ptr %ptr) {396; CHECK-LABEL: vpload_factor4:397; CHECK:       # %bb.0:398; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma399; CHECK-NEXT:    vlseg4e32.v v8, (a0)400; CHECK-NEXT:    ret401  %interleaved.vec = tail call <16 x i32> @llvm.vp.load.v16i32.p0(ptr %ptr, <16 x i1> splat (i1 true), i32 16)402  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>403  %v1 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>404  %v2 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>405  %v3 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>406  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0407  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1408  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2409  %res3 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res2, <4 x i32> %v3, 3410  ret {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res3411}412 413; TODO: Add more tests for vp.load/store + (de)interleave intrinsics with fixed vectors.414define {<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>} @vpload_factor4_intrinsics(ptr %ptr) {415; CHECK-LABEL: vpload_factor4_intrinsics:416; CHECK:       # %bb.0:417; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma418; CHECK-NEXT:    vlseg4e32.v v8, (a0)419; CHECK-NEXT:    ret420  %wide.masked.load = call <8 x i32> @llvm.vp.load.v8i32.p0(ptr %ptr, <8 x i1> splat (i1 true), i32 8)421  %d = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.vector.deinterleave4.v8i32(<8 x i32> %wide.masked.load)422  %t0 = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %d, 0423  %t1 = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %d, 1424  %t2 = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %d, 2425  %t3 = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %d, 3426 427  %res0 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } poison, <2 x i32> %t0, 0428  %res1 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %res0, <2 x i32> %t1, 1429  %res2 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %res1, <2 x i32> %t2, 2430  %res3 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %res2, <2 x i32> %t3, 3431  ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %res3432}433 434define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @vpload_factor5(ptr %ptr) {435; CHECK-LABEL: vpload_factor5:436; CHECK:       # %bb.0:437; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma438; CHECK-NEXT:    vlseg5e32.v v8, (a0)439; CHECK-NEXT:    ret440  %interleaved.vec = tail call <20 x i32> @llvm.vp.load.v20i32.p0(ptr %ptr, <20 x i1> splat (i1 true), i32 20)441  %v0 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 0, i32 5, i32 10, i32 15>442  %v1 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 1, i32 6, i32 11, i32 16>443  %v2 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 2, i32 7, i32 12, i32 17>444  %v3 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 3, i32 8, i32 13, i32 18>445  %v4 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 4, i32 9, i32 14, i32 19>446  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 0447  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1448  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2449  %res3 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res2, <4 x i32> %v3, 3450  %res4 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res3, <4 x i32> %v4, 4451  ret {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res4452}453 454define {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} @vpload_factor6(ptr %ptr) {455; CHECK-LABEL: vpload_factor6:456; CHECK:       # %bb.0:457; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma458; CHECK-NEXT:    vlseg6e16.v v8, (a0)459; CHECK-NEXT:    ret460  %interleaved.vec = tail call <12 x i16> @llvm.vp.load.v12i16.p0(ptr %ptr, <12 x i1> splat (i1 true), i32 12)461  %v0 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 0, i32 6>462  %v1 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 1, i32 7>463  %v2 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 2, i32 8>464  %v3 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 3, i32 9>465  %v4 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 4, i32 10>466  %v5 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 5, i32 11>467  %res0 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} poison, <2 x i16> %v0, 0468  %res1 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res0, <2 x i16> %v1, 1469  %res2 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res1, <2 x i16> %v2, 2470  %res3 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res2, <2 x i16> %v3, 3471  %res4 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res3, <2 x i16> %v4, 4472  %res5 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res4, <2 x i16> %v5, 5473  ret {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res5474}475 476define {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} @vpload_factor7(ptr %ptr) {477; CHECK-LABEL: vpload_factor7:478; CHECK:       # %bb.0:479; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma480; CHECK-NEXT:    vlseg7e16.v v8, (a0)481; CHECK-NEXT:    ret482  %interleaved.vec = tail call <14 x i16> @llvm.vp.load.v14i16.p0(ptr %ptr, <14 x i1> splat (i1 true), i32 14)483  %v0 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 0, i32 7>484  %v1 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 1, i32 8>485  %v2 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 2, i32 9>486  %v3 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 3, i32 10>487  %v4 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 4, i32 11>488  %v5 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 5, i32 12>489  %v6 = shufflevector <14 x i16> %interleaved.vec, <14 x i16> poison, <2 x i32> <i32 6, i32 13>490  %res0 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} poison, <2 x i16> %v0, 0491  %res1 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res0, <2 x i16> %v1, 1492  %res2 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res1, <2 x i16> %v2, 2493  %res3 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res2, <2 x i16> %v3, 3494  %res4 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res3, <2 x i16> %v4, 4495  %res5 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res4, <2 x i16> %v5, 5496  %res6 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res5, <2 x i16> %v6, 6497  ret {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res6498}499 500define {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} @vpload_factor8(ptr %ptr) {501; CHECK-LABEL: vpload_factor8:502; CHECK:       # %bb.0:503; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma504; CHECK-NEXT:    vlseg8e16.v v8, (a0)505; CHECK-NEXT:    ret506  %interleaved.vec = tail call <16 x i16> @llvm.vp.load.v16i16.p0(ptr %ptr, <16 x i1> splat (i1 true), i32 16)507  %v0 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 0, i32 8>508  %v1 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 1, i32 9>509  %v2 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 2, i32 10>510  %v3 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 3, i32 11>511  %v4 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 4, i32 12>512  %v5 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 5, i32 13>513  %v6 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 6, i32 14>514  %v7 = shufflevector <16 x i16> %interleaved.vec, <16 x i16> poison, <2 x i32> <i32 7, i32 15>515  %res0 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} poison, <2 x i16> %v0, 0516  %res1 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res0, <2 x i16> %v1, 1517  %res2 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res1, <2 x i16> %v2, 2518  %res3 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res2, <2 x i16> %v3, 3519  %res4 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res3, <2 x i16> %v4, 4520  %res5 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res4, <2 x i16> %v5, 5521  %res6 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res5, <2 x i16> %v6, 6522  %res7 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res6, <2 x i16> %v7, 7523  ret {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res7524}525 526; LMUL * NF is > 8 here and so shouldn't be lowered to a vlseg527define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_factor6_too_big(ptr %ptr) {528; RV32-LABEL: load_factor6_too_big:529; RV32:       # %bb.0:530; RV32-NEXT:    addi sp, sp, -16531; RV32-NEXT:    .cfi_def_cfa_offset 16532; RV32-NEXT:    csrr a2, vlenb533; RV32-NEXT:    li a3, 100534; RV32-NEXT:    mul a2, a2, a3535; RV32-NEXT:    sub sp, sp, a2536; RV32-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0xe4, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 100 * vlenb537; RV32-NEXT:    addi a4, a1, 128538; RV32-NEXT:    addi a5, a1, 256539; RV32-NEXT:    li a2, 32540; RV32-NEXT:    lui a3, 12541; RV32-NEXT:    lui a6, 12291542; RV32-NEXT:    lui a7, %hi(.LCPI27_0)543; RV32-NEXT:    addi a7, a7, %lo(.LCPI27_0)544; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma545; RV32-NEXT:    vle32.v v24, (a5)546; RV32-NEXT:    vmv.s.x v0, a3547; RV32-NEXT:    vle32.v v8, (a1)548; RV32-NEXT:    csrr a1, vlenb549; RV32-NEXT:    slli a1, a1, 6550; RV32-NEXT:    add a1, sp, a1551; RV32-NEXT:    addi a1, a1, 16552; RV32-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill553; RV32-NEXT:    addi a6, a6, 3554; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma555; RV32-NEXT:    vslideup.vi v16, v24, 4556; RV32-NEXT:    vsetivli zero, 16, e32, m8, ta, ma557; RV32-NEXT:    vslidedown.vi v8, v24, 16558; RV32-NEXT:    csrr a1, vlenb559; RV32-NEXT:    li a5, 76560; RV32-NEXT:    mul a1, a1, a5561; RV32-NEXT:    add a1, sp, a1562; RV32-NEXT:    addi a1, a1, 16563; RV32-NEXT:    vs8r.v v24, (a1) # vscale x 64-byte Folded Spill564; RV32-NEXT:    csrr a1, vlenb565; RV32-NEXT:    li a5, 92566; RV32-NEXT:    mul a1, a1, a5567; RV32-NEXT:    add a1, sp, a1568; RV32-NEXT:    addi a1, a1, 16569; RV32-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill570; RV32-NEXT:    vmv1r.v v30, v0571; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, mu572; RV32-NEXT:    vslideup.vi v16, v8, 10, v0.t573; RV32-NEXT:    csrr a1, vlenb574; RV32-NEXT:    li a5, 72575; RV32-NEXT:    mul a1, a1, a5576; RV32-NEXT:    add a1, sp, a1577; RV32-NEXT:    addi a1, a1, 16578; RV32-NEXT:    vs4r.v v16, (a1) # vscale x 32-byte Folded Spill579; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma580; RV32-NEXT:    vle32.v v8, (a4)581; RV32-NEXT:    csrr a1, vlenb582; RV32-NEXT:    li a4, 84583; RV32-NEXT:    mul a1, a1, a4584; RV32-NEXT:    add a1, sp, a1585; RV32-NEXT:    addi a1, a1, 16586; RV32-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill587; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma588; RV32-NEXT:    vle16.v v28, (a7)589; RV32-NEXT:    vmv.s.x v0, a6590; RV32-NEXT:    csrr a1, vlenb591; RV32-NEXT:    slli a1, a1, 6592; RV32-NEXT:    add a1, sp, a1593; RV32-NEXT:    addi a1, a1, 16594; RV32-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload595; RV32-NEXT:    csrr a1, vlenb596; RV32-NEXT:    li a4, 84597; RV32-NEXT:    mul a1, a1, a4598; RV32-NEXT:    add a1, sp, a1599; RV32-NEXT:    addi a1, a1, 16600; RV32-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload601; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma602; RV32-NEXT:    vmerge.vvm v16, v8, v16, v0603; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma604; RV32-NEXT:    vrgatherei16.vv v0, v16, v28605; RV32-NEXT:    csrr a1, vlenb606; RV32-NEXT:    li a4, 52607; RV32-NEXT:    mul a1, a1, a4608; RV32-NEXT:    add a1, sp, a1609; RV32-NEXT:    addi a1, a1, 16610; RV32-NEXT:    vs8r.v v0, (a1) # vscale x 64-byte Folded Spill611; RV32-NEXT:    vsetvli zero, zero, e32, m4, ta, mu612; RV32-NEXT:    vslideup.vi v8, v24, 2613; RV32-NEXT:    vmv1r.v v0, v30614; RV32-NEXT:    csrr a1, vlenb615; RV32-NEXT:    li a4, 92616; RV32-NEXT:    mul a1, a1, a4617; RV32-NEXT:    add a1, sp, a1618; RV32-NEXT:    addi a1, a1, 16619; RV32-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload620; RV32-NEXT:    vslideup.vi v8, v16, 8, v0.t621; RV32-NEXT:    csrr a1, vlenb622; RV32-NEXT:    li a4, 60623; RV32-NEXT:    mul a1, a1, a4624; RV32-NEXT:    add a1, sp, a1625; RV32-NEXT:    addi a1, a1, 16626; RV32-NEXT:    vs4r.v v8, (a1) # vscale x 32-byte Folded Spill627; RV32-NEXT:    lui a7, 49164628; RV32-NEXT:    lui a1, %hi(.LCPI27_1)629; RV32-NEXT:    addi a1, a1, %lo(.LCPI27_1)630; RV32-NEXT:    lui t2, 3631; RV32-NEXT:    lui t1, 196656632; RV32-NEXT:    lui a4, %hi(.LCPI27_3)633; RV32-NEXT:    addi a4, a4, %lo(.LCPI27_3)634; RV32-NEXT:    lui t0, 786624635; RV32-NEXT:    li a5, 48636; RV32-NEXT:    lui a6, 768637; RV32-NEXT:    addi a7, a7, 12638; RV32-NEXT:    vmv.s.x v0, a7639; RV32-NEXT:    addi t2, t2, 3640; RV32-NEXT:    csrr a7, vlenb641; RV32-NEXT:    li t3, 84642; RV32-NEXT:    mul a7, a7, t3643; RV32-NEXT:    add a7, sp, a7644; RV32-NEXT:    addi a7, a7, 16645; RV32-NEXT:    vl8r.v v16, (a7) # vscale x 64-byte Folded Reload646; RV32-NEXT:    csrr a7, vlenb647; RV32-NEXT:    slli a7, a7, 6648; RV32-NEXT:    add a7, sp, a7649; RV32-NEXT:    addi a7, a7, 16650; RV32-NEXT:    vl8r.v v8, (a7) # vscale x 64-byte Folded Reload651; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma652; RV32-NEXT:    vmerge.vvm v8, v16, v8, v0653; RV32-NEXT:    csrr a7, vlenb654; RV32-NEXT:    slli a7, a7, 5655; RV32-NEXT:    add a7, sp, a7656; RV32-NEXT:    addi a7, a7, 16657; RV32-NEXT:    vs8r.v v8, (a7) # vscale x 64-byte Folded Spill658; RV32-NEXT:    vmv.s.x v0, t2659; RV32-NEXT:    addi a7, t1, 48660; RV32-NEXT:    csrr t1, vlenb661; RV32-NEXT:    li t2, 92662; RV32-NEXT:    mul t1, t1, t2663; RV32-NEXT:    add t1, sp, t1664; RV32-NEXT:    addi t1, t1, 16665; RV32-NEXT:    vl8r.v v24, (t1) # vscale x 64-byte Folded Reload666; RV32-NEXT:    csrr t1, vlenb667; RV32-NEXT:    li t2, 76668; RV32-NEXT:    mul t1, t1, t2669; RV32-NEXT:    add t1, sp, t1670; RV32-NEXT:    addi t1, t1, 16671; RV32-NEXT:    vl8r.v v8, (t1) # vscale x 64-byte Folded Reload672; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma673; RV32-NEXT:    vmerge.vvm v8, v24, v8, v0674; RV32-NEXT:    csrr t1, vlenb675; RV32-NEXT:    li t2, 44676; RV32-NEXT:    mul t1, t1, t2677; RV32-NEXT:    add t1, sp, t1678; RV32-NEXT:    addi t1, t1, 16679; RV32-NEXT:    vs4r.v v8, (t1) # vscale x 32-byte Folded Spill680; RV32-NEXT:    vmv.s.x v0, a7681; RV32-NEXT:    addi a3, a3, 12682; RV32-NEXT:    csrr a7, vlenb683; RV32-NEXT:    slli a7, a7, 6684; RV32-NEXT:    add a7, sp, a7685; RV32-NEXT:    addi a7, a7, 16686; RV32-NEXT:    vl8r.v v24, (a7) # vscale x 64-byte Folded Reload687; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma688; RV32-NEXT:    vmerge.vvm v8, v16, v24, v0689; RV32-NEXT:    csrr a7, vlenb690; RV32-NEXT:    slli a7, a7, 4691; RV32-NEXT:    add a7, sp, a7692; RV32-NEXT:    addi a7, a7, 16693; RV32-NEXT:    vs8r.v v8, (a7) # vscale x 64-byte Folded Spill694; RV32-NEXT:    vmv8r.v v16, v24695; RV32-NEXT:    vmv.s.x v0, a3696; RV32-NEXT:    addi a3, t0, 192697; RV32-NEXT:    csrr a7, vlenb698; RV32-NEXT:    li t0, 92699; RV32-NEXT:    mul a7, a7, t0700; RV32-NEXT:    add a7, sp, a7701; RV32-NEXT:    addi a7, a7, 16702; RV32-NEXT:    vl8r.v v24, (a7) # vscale x 64-byte Folded Reload703; RV32-NEXT:    csrr a7, vlenb704; RV32-NEXT:    li t0, 76705; RV32-NEXT:    mul a7, a7, t0706; RV32-NEXT:    add a7, sp, a7707; RV32-NEXT:    addi a7, a7, 16708; RV32-NEXT:    vl8r.v v8, (a7) # vscale x 64-byte Folded Reload709; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma710; RV32-NEXT:    vmerge.vvm v8, v24, v8, v0711; RV32-NEXT:    csrr a7, vlenb712; RV32-NEXT:    li t0, 48713; RV32-NEXT:    mul a7, a7, t0714; RV32-NEXT:    add a7, sp, a7715; RV32-NEXT:    addi a7, a7, 16716; RV32-NEXT:    vs4r.v v8, (a7) # vscale x 32-byte Folded Spill717; RV32-NEXT:    vmv.s.x v0, a3718; RV32-NEXT:    li a3, 192719; RV32-NEXT:    csrr a7, vlenb720; RV32-NEXT:    li t0, 84721; RV32-NEXT:    mul a7, a7, t0722; RV32-NEXT:    add a7, sp, a7723; RV32-NEXT:    addi a7, a7, 16724; RV32-NEXT:    vl8r.v v8, (a7) # vscale x 64-byte Folded Reload725; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma726; RV32-NEXT:    vmerge.vvm v8, v8, v16, v0727; RV32-NEXT:    csrr a7, vlenb728; RV32-NEXT:    li t0, 24729; RV32-NEXT:    mul a7, a7, t0730; RV32-NEXT:    add a7, sp, a7731; RV32-NEXT:    addi a7, a7, 16732; RV32-NEXT:    vs8r.v v8, (a7) # vscale x 64-byte Folded Spill733; RV32-NEXT:    vmv.s.x v0, a5734; RV32-NEXT:    addi a5, a6, 768735; RV32-NEXT:    csrr a6, vlenb736; RV32-NEXT:    li a7, 92737; RV32-NEXT:    mul a6, a6, a7738; RV32-NEXT:    add a6, sp, a6739; RV32-NEXT:    addi a6, a6, 16740; RV32-NEXT:    vl8r.v v24, (a6) # vscale x 64-byte Folded Reload741; RV32-NEXT:    csrr a6, vlenb742; RV32-NEXT:    li a7, 76743; RV32-NEXT:    mul a6, a6, a7744; RV32-NEXT:    add a6, sp, a6745; RV32-NEXT:    addi a6, a6, 16746; RV32-NEXT:    vl8r.v v8, (a6) # vscale x 64-byte Folded Reload747; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma748; RV32-NEXT:    vmerge.vvm v8, v24, v8, v0749; RV32-NEXT:    csrr a6, vlenb750; RV32-NEXT:    li a7, 40751; RV32-NEXT:    mul a6, a6, a7752; RV32-NEXT:    add a6, sp, a6753; RV32-NEXT:    addi a6, a6, 16754; RV32-NEXT:    vs4r.v v8, (a6) # vscale x 32-byte Folded Spill755; RV32-NEXT:    vmv.s.x v0, a5756; RV32-NEXT:    vle16.v v6, (a1)757; RV32-NEXT:    vle16.v v2, (a4)758; RV32-NEXT:    csrr a1, vlenb759; RV32-NEXT:    li a4, 84760; RV32-NEXT:    mul a1, a1, a4761; RV32-NEXT:    add a1, sp, a1762; RV32-NEXT:    addi a1, a1, 16763; RV32-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload764; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma765; RV32-NEXT:    vmerge.vvm v8, v8, v16, v0766; RV32-NEXT:    csrr a1, vlenb767; RV32-NEXT:    slli a1, a1, 3768; RV32-NEXT:    add a1, sp, a1769; RV32-NEXT:    addi a1, a1, 16770; RV32-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill771; RV32-NEXT:    vmv.s.x v0, a3772; RV32-NEXT:    csrr a1, vlenb773; RV32-NEXT:    slli a1, a1, 5774; RV32-NEXT:    add a1, sp, a1775; RV32-NEXT:    addi a1, a1, 16776; RV32-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload777; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma778; RV32-NEXT:    vrgatherei16.vv v24, v8, v6779; RV32-NEXT:    addi a1, sp, 16780; RV32-NEXT:    vs8r.v v24, (a1) # vscale x 64-byte Folded Spill781; RV32-NEXT:    csrr a1, vlenb782; RV32-NEXT:    li a3, 92783; RV32-NEXT:    mul a1, a1, a3784; RV32-NEXT:    add a1, sp, a1785; RV32-NEXT:    addi a1, a1, 16786; RV32-NEXT:    vl8r.v v24, (a1) # vscale x 64-byte Folded Reload787; RV32-NEXT:    csrr a1, vlenb788; RV32-NEXT:    li a3, 76789; RV32-NEXT:    mul a1, a1, a3790; RV32-NEXT:    add a1, sp, a1791; RV32-NEXT:    addi a1, a1, 16792; RV32-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload793; RV32-NEXT:    vsetvli zero, zero, e32, m4, ta, ma794; RV32-NEXT:    vmerge.vvm v8, v24, v8, v0795; RV32-NEXT:    csrr a1, vlenb796; RV32-NEXT:    li a3, 92797; RV32-NEXT:    mul a1, a1, a3798; RV32-NEXT:    add a1, sp, a1799; RV32-NEXT:    addi a1, a1, 16800; RV32-NEXT:    vs4r.v v8, (a1) # vscale x 32-byte Folded Spill801; RV32-NEXT:    csrr a1, vlenb802; RV32-NEXT:    slli a1, a1, 4803; RV32-NEXT:    add a1, sp, a1804; RV32-NEXT:    addi a1, a1, 16805; RV32-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload806; RV32-NEXT:    vsetvli zero, zero, e64, m8, ta, ma807; RV32-NEXT:    vrgatherei16.vv v24, v8, v2808; RV32-NEXT:    lui a1, %hi(.LCPI27_2)809; RV32-NEXT:    addi a1, a1, %lo(.LCPI27_2)810; RV32-NEXT:    lui a3, 3073811; RV32-NEXT:    addi a3, a3, -1024812; RV32-NEXT:    vmv.s.x v0, a3813; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma814; RV32-NEXT:    vle16.v v3, (a1)815; RV32-NEXT:    csrr a1, vlenb816; RV32-NEXT:    li a3, 84817; RV32-NEXT:    mul a1, a1, a3818; RV32-NEXT:    add a1, sp, a1819; RV32-NEXT:    addi a1, a1, 16820; RV32-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload821; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma822; RV32-NEXT:    vmerge.vvm v8, v8, v16, v0823; RV32-NEXT:    csrr a1, vlenb824; RV32-NEXT:    li a2, 72825; RV32-NEXT:    mul a1, a1, a2826; RV32-NEXT:    add a1, sp, a1827; RV32-NEXT:    addi a1, a1, 16828; RV32-NEXT:    vl4r.v v28, (a1) # vscale x 32-byte Folded Reload829; RV32-NEXT:    csrr a1, vlenb830; RV32-NEXT:    li a2, 52831; RV32-NEXT:    mul a1, a1, a2832; RV32-NEXT:    add a1, sp, a1833; RV32-NEXT:    addi a1, a1, 16834; RV32-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload835; RV32-NEXT:    vsetivli zero, 12, e32, m4, tu, ma836; RV32-NEXT:    vmv.v.v v28, v16837; RV32-NEXT:    csrr a1, vlenb838; RV32-NEXT:    li a2, 72839; RV32-NEXT:    mul a1, a1, a2840; RV32-NEXT:    add a1, sp, a1841; RV32-NEXT:    addi a1, a1, 16842; RV32-NEXT:    vs4r.v v28, (a1) # vscale x 32-byte Folded Spill843; RV32-NEXT:    addi a1, sp, 16844; RV32-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload845; RV32-NEXT:    csrr a1, vlenb846; RV32-NEXT:    li a2, 60847; RV32-NEXT:    mul a1, a1, a2848; RV32-NEXT:    add a1, sp, a1849; RV32-NEXT:    addi a1, a1, 16850; RV32-NEXT:    vl4r.v v20, (a1) # vscale x 32-byte Folded Reload851; RV32-NEXT:    vmv.v.v v20, v16852; RV32-NEXT:    csrr a1, vlenb853; RV32-NEXT:    li a2, 60854; RV32-NEXT:    mul a1, a1, a2855; RV32-NEXT:    add a1, sp, a1856; RV32-NEXT:    addi a1, a1, 16857; RV32-NEXT:    vs4r.v v20, (a1) # vscale x 32-byte Folded Spill858; RV32-NEXT:    csrr a1, vlenb859; RV32-NEXT:    li a2, 44860; RV32-NEXT:    mul a1, a1, a2861; RV32-NEXT:    add a1, sp, a1862; RV32-NEXT:    addi a1, a1, 16863; RV32-NEXT:    vl4r.v v16, (a1) # vscale x 32-byte Folded Reload864; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma865; RV32-NEXT:    vrgatherei16.vv v20, v16, v3866; RV32-NEXT:    vsetivli zero, 10, e32, m4, tu, ma867; RV32-NEXT:    vmv.v.v v20, v24868; RV32-NEXT:    csrr a1, vlenb869; RV32-NEXT:    slli a1, a1, 6870; RV32-NEXT:    add a1, sp, a1871; RV32-NEXT:    addi a1, a1, 16872; RV32-NEXT:    vs4r.v v20, (a1) # vscale x 32-byte Folded Spill873; RV32-NEXT:    lui a1, %hi(.LCPI27_4)874; RV32-NEXT:    addi a1, a1, %lo(.LCPI27_4)875; RV32-NEXT:    lui a2, %hi(.LCPI27_5)876; RV32-NEXT:    addi a2, a2, %lo(.LCPI27_5)877; RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma878; RV32-NEXT:    vle16.v v24, (a2)879; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma880; RV32-NEXT:    vle16.v v16, (a1)881; RV32-NEXT:    csrr a1, vlenb882; RV32-NEXT:    li a2, 84883; RV32-NEXT:    mul a1, a1, a2884; RV32-NEXT:    add a1, sp, a1885; RV32-NEXT:    addi a1, a1, 16886; RV32-NEXT:    vs1r.v v16, (a1) # vscale x 8-byte Folded Spill887; RV32-NEXT:    lui a1, %hi(.LCPI27_7)888; RV32-NEXT:    addi a1, a1, %lo(.LCPI27_7)889; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma890; RV32-NEXT:    vle16.v v16, (a1)891; RV32-NEXT:    csrr a1, vlenb892; RV32-NEXT:    li a2, 76893; RV32-NEXT:    mul a1, a1, a2894; RV32-NEXT:    add a1, sp, a1895; RV32-NEXT:    addi a1, a1, 16896; RV32-NEXT:    vs2r.v v16, (a1) # vscale x 16-byte Folded Spill897; RV32-NEXT:    csrr a1, vlenb898; RV32-NEXT:    li a2, 24899; RV32-NEXT:    mul a1, a1, a2900; RV32-NEXT:    add a1, sp, a1901; RV32-NEXT:    addi a1, a1, 16902; RV32-NEXT:    vl8r.v v0, (a1) # vscale x 64-byte Folded Reload903; RV32-NEXT:    vrgatherei16.vv v16, v0, v24904; RV32-NEXT:    csrr a1, vlenb905; RV32-NEXT:    li a2, 48906; RV32-NEXT:    mul a1, a1, a2907; RV32-NEXT:    add a1, sp, a1908; RV32-NEXT:    addi a1, a1, 16909; RV32-NEXT:    vl4r.v v20, (a1) # vscale x 32-byte Folded Reload910; RV32-NEXT:    csrr a1, vlenb911; RV32-NEXT:    li a2, 84912; RV32-NEXT:    mul a1, a1, a2913; RV32-NEXT:    add a1, sp, a1914; RV32-NEXT:    addi a1, a1, 16915; RV32-NEXT:    vl1r.v v7, (a1) # vscale x 8-byte Folded Reload916; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma917; RV32-NEXT:    vrgatherei16.vv v24, v20, v7918; RV32-NEXT:    vsetivli zero, 10, e32, m4, tu, ma919; RV32-NEXT:    vmv.v.v v24, v16920; RV32-NEXT:    csrr a1, vlenb921; RV32-NEXT:    slli a1, a1, 3922; RV32-NEXT:    add a1, sp, a1923; RV32-NEXT:    addi a1, a1, 16924; RV32-NEXT:    vl8r.v v0, (a1) # vscale x 64-byte Folded Reload925; RV32-NEXT:    csrr a1, vlenb926; RV32-NEXT:    li a2, 76927; RV32-NEXT:    mul a1, a1, a2928; RV32-NEXT:    add a1, sp, a1929; RV32-NEXT:    addi a1, a1, 16930; RV32-NEXT:    vl2r.v v28, (a1) # vscale x 16-byte Folded Reload931; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma932; RV32-NEXT:    vrgatherei16.vv v16, v0, v28933; RV32-NEXT:    lui a1, %hi(.LCPI27_6)934; RV32-NEXT:    addi a1, a1, %lo(.LCPI27_6)935; RV32-NEXT:    lui a2, %hi(.LCPI27_8)936; RV32-NEXT:    addi a2, a2, %lo(.LCPI27_8)937; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma938; RV32-NEXT:    vle16.v v4, (a1)939; RV32-NEXT:    lui a1, %hi(.LCPI27_9)940; RV32-NEXT:    addi a1, a1, %lo(.LCPI27_9)941; RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma942; RV32-NEXT:    vle16.v v6, (a1)943; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma944; RV32-NEXT:    vle16.v v5, (a2)945; RV32-NEXT:    csrr a1, vlenb946; RV32-NEXT:    li a2, 40947; RV32-NEXT:    mul a1, a1, a2948; RV32-NEXT:    add a1, sp, a1949; RV32-NEXT:    addi a1, a1, 16950; RV32-NEXT:    vl4r.v v20, (a1) # vscale x 32-byte Folded Reload951; RV32-NEXT:    vrgatherei16.vv v0, v20, v4952; RV32-NEXT:    vsetivli zero, 10, e32, m4, tu, ma953; RV32-NEXT:    vmv.v.v v0, v16954; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma955; RV32-NEXT:    vrgatherei16.vv v16, v8, v6956; RV32-NEXT:    csrr a1, vlenb957; RV32-NEXT:    li a2, 92958; RV32-NEXT:    mul a1, a1, a2959; RV32-NEXT:    add a1, sp, a1960; RV32-NEXT:    addi a1, a1, 16961; RV32-NEXT:    vl4r.v v12, (a1) # vscale x 32-byte Folded Reload962; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma963; RV32-NEXT:    vrgatherei16.vv v8, v12, v5964; RV32-NEXT:    vsetivli zero, 10, e32, m4, tu, ma965; RV32-NEXT:    vmv.v.v v8, v16966; RV32-NEXT:    addi a1, a0, 320967; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma968; RV32-NEXT:    vse32.v v8, (a1)969; RV32-NEXT:    addi a1, a0, 256970; RV32-NEXT:    vse32.v v0, (a1)971; RV32-NEXT:    addi a1, a0, 192972; RV32-NEXT:    vse32.v v24, (a1)973; RV32-NEXT:    addi a1, a0, 128974; RV32-NEXT:    csrr a2, vlenb975; RV32-NEXT:    slli a2, a2, 6976; RV32-NEXT:    add a2, sp, a2977; RV32-NEXT:    addi a2, a2, 16978; RV32-NEXT:    vl4r.v v8, (a2) # vscale x 32-byte Folded Reload979; RV32-NEXT:    vse32.v v8, (a1)980; RV32-NEXT:    addi a1, a0, 64981; RV32-NEXT:    csrr a2, vlenb982; RV32-NEXT:    li a3, 60983; RV32-NEXT:    mul a2, a2, a3984; RV32-NEXT:    add a2, sp, a2985; RV32-NEXT:    addi a2, a2, 16986; RV32-NEXT:    vl4r.v v8, (a2) # vscale x 32-byte Folded Reload987; RV32-NEXT:    vse32.v v8, (a1)988; RV32-NEXT:    csrr a1, vlenb989; RV32-NEXT:    li a2, 72990; RV32-NEXT:    mul a1, a1, a2991; RV32-NEXT:    add a1, sp, a1992; RV32-NEXT:    addi a1, a1, 16993; RV32-NEXT:    vl4r.v v8, (a1) # vscale x 32-byte Folded Reload994; RV32-NEXT:    vse32.v v8, (a0)995; RV32-NEXT:    csrr a0, vlenb996; RV32-NEXT:    li a1, 100997; RV32-NEXT:    mul a0, a0, a1998; RV32-NEXT:    add sp, sp, a0999; RV32-NEXT:    .cfi_def_cfa sp, 161000; RV32-NEXT:    addi sp, sp, 161001; RV32-NEXT:    .cfi_def_cfa_offset 01002; RV32-NEXT:    ret1003;1004; RV64-LABEL: load_factor6_too_big:1005; RV64:       # %bb.0:1006; RV64-NEXT:    addi sp, sp, -161007; RV64-NEXT:    .cfi_def_cfa_offset 161008; RV64-NEXT:    csrr a2, vlenb1009; RV64-NEXT:    li a3, 931010; RV64-NEXT:    mul a2, a2, a31011; RV64-NEXT:    sub sp, sp, a21012; RV64-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0xdd, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 93 * vlenb1013; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1014; RV64-NEXT:    vle64.v v8, (a1)1015; RV64-NEXT:    csrr a2, vlenb1016; RV64-NEXT:    li a3, 531017; RV64-NEXT:    mul a2, a2, a31018; RV64-NEXT:    add a2, sp, a21019; RV64-NEXT:    addi a2, a2, 161020; RV64-NEXT:    vs8r.v v8, (a2) # vscale x 64-byte Folded Spill1021; RV64-NEXT:    addi a2, a1, 1281022; RV64-NEXT:    addi a3, a1, 2561023; RV64-NEXT:    li a4, 1281024; RV64-NEXT:    lui a1, 11025; RV64-NEXT:    vle64.v v8, (a3)1026; RV64-NEXT:    lui a3, %hi(.LCPI27_0)1027; RV64-NEXT:    addi a3, a3, %lo(.LCPI27_0)1028; RV64-NEXT:    vmv.s.x v0, a41029; RV64-NEXT:    csrr a4, vlenb1030; RV64-NEXT:    li a5, 611031; RV64-NEXT:    mul a4, a4, a51032; RV64-NEXT:    add a4, sp, a41033; RV64-NEXT:    addi a4, a4, 161034; RV64-NEXT:    vs1r.v v0, (a4) # vscale x 8-byte Folded Spill1035; RV64-NEXT:    addi a4, a1, 651036; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma1037; RV64-NEXT:    vslideup.vi v24, v8, 21038; RV64-NEXT:    vsetivli zero, 8, e64, m8, ta, ma1039; RV64-NEXT:    vslidedown.vi v16, v8, 81040; RV64-NEXT:    csrr a5, vlenb1041; RV64-NEXT:    li a6, 771042; RV64-NEXT:    mul a5, a5, a61043; RV64-NEXT:    add a5, sp, a51044; RV64-NEXT:    addi a5, a5, 161045; RV64-NEXT:    vs8r.v v16, (a5) # vscale x 64-byte Folded Spill1046; RV64-NEXT:    csrr a5, vlenb1047; RV64-NEXT:    li a6, 771048; RV64-NEXT:    mul a5, a5, a61049; RV64-NEXT:    add a5, sp, a51050; RV64-NEXT:    addi a5, a5, 161051; RV64-NEXT:    vl8r.v v16, (a5) # vscale x 64-byte Folded Reload1052; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu1053; RV64-NEXT:    vslideup.vi v24, v16, 5, v0.t1054; RV64-NEXT:    csrr a5, vlenb1055; RV64-NEXT:    li a6, 731056; RV64-NEXT:    mul a5, a5, a61057; RV64-NEXT:    add a5, sp, a51058; RV64-NEXT:    addi a5, a5, 161059; RV64-NEXT:    vs4r.v v24, (a5) # vscale x 32-byte Folded Spill1060; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1061; RV64-NEXT:    vle64.v v24, (a2)1062; RV64-NEXT:    csrr a2, vlenb1063; RV64-NEXT:    li a5, 851064; RV64-NEXT:    mul a2, a2, a51065; RV64-NEXT:    add a2, sp, a21066; RV64-NEXT:    addi a2, a2, 161067; RV64-NEXT:    vs8r.v v24, (a2) # vscale x 64-byte Folded Spill1068; RV64-NEXT:    vle16.v v12, (a3)1069; RV64-NEXT:    vmv.s.x v0, a41070; RV64-NEXT:    csrr a2, vlenb1071; RV64-NEXT:    li a3, 851072; RV64-NEXT:    mul a2, a2, a31073; RV64-NEXT:    add a2, sp, a21074; RV64-NEXT:    addi a2, a2, 161075; RV64-NEXT:    vl8r.v v24, (a2) # vscale x 64-byte Folded Reload1076; RV64-NEXT:    csrr a2, vlenb1077; RV64-NEXT:    li a3, 531078; RV64-NEXT:    mul a2, a2, a31079; RV64-NEXT:    add a2, sp, a21080; RV64-NEXT:    addi a2, a2, 161081; RV64-NEXT:    vl8r.v v16, (a2) # vscale x 64-byte Folded Reload1082; RV64-NEXT:    vmerge.vvm v24, v24, v16, v01083; RV64-NEXT:    vrgatherei16.vv v0, v24, v121084; RV64-NEXT:    csrr a2, vlenb1085; RV64-NEXT:    li a3, 371086; RV64-NEXT:    mul a2, a2, a31087; RV64-NEXT:    add a2, sp, a21088; RV64-NEXT:    addi a2, a2, 161089; RV64-NEXT:    vs8r.v v0, (a2) # vscale x 64-byte Folded Spill1090; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu1091; RV64-NEXT:    vslideup.vi v12, v8, 11092; RV64-NEXT:    csrr a2, vlenb1093; RV64-NEXT:    li a3, 611094; RV64-NEXT:    mul a2, a2, a31095; RV64-NEXT:    add a2, sp, a21096; RV64-NEXT:    addi a2, a2, 161097; RV64-NEXT:    vl1r.v v7, (a2) # vscale x 8-byte Folded Reload1098; RV64-NEXT:    vmv1r.v v0, v71099; RV64-NEXT:    csrr a2, vlenb1100; RV64-NEXT:    li a3, 771101; RV64-NEXT:    mul a2, a2, a31102; RV64-NEXT:    add a2, sp, a21103; RV64-NEXT:    addi a2, a2, 161104; RV64-NEXT:    vl8r.v v24, (a2) # vscale x 64-byte Folded Reload1105; RV64-NEXT:    vslideup.vi v12, v24, 4, v0.t1106; RV64-NEXT:    csrr a2, vlenb1107; RV64-NEXT:    li a3, 691108; RV64-NEXT:    mul a2, a2, a31109; RV64-NEXT:    add a2, sp, a21110; RV64-NEXT:    addi a2, a2, 161111; RV64-NEXT:    vs4r.v v12, (a2) # vscale x 32-byte Folded Spill1112; RV64-NEXT:    lui a2, 21113; RV64-NEXT:    lui a3, 41114; RV64-NEXT:    li a4, 321115; RV64-NEXT:    addi a2, a2, 1301116; RV64-NEXT:    vmv.s.x v0, a21117; RV64-NEXT:    addi a2, a3, 2601118; RV64-NEXT:    vmv8r.v v24, v161119; RV64-NEXT:    csrr a3, vlenb1120; RV64-NEXT:    li a5, 851121; RV64-NEXT:    mul a3, a3, a51122; RV64-NEXT:    add a3, sp, a31123; RV64-NEXT:    addi a3, a3, 161124; RV64-NEXT:    vl8r.v v16, (a3) # vscale x 64-byte Folded Reload1125; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1126; RV64-NEXT:    vmerge.vvm v16, v16, v24, v01127; RV64-NEXT:    csrr a3, vlenb1128; RV64-NEXT:    slli a3, a3, 31129; RV64-NEXT:    add a3, sp, a31130; RV64-NEXT:    addi a3, a3, 161131; RV64-NEXT:    vs8r.v v16, (a3) # vscale x 64-byte Folded Spill1132; RV64-NEXT:    vmv.s.x v0, a21133; RV64-NEXT:    vmv.s.x v2, a41134; RV64-NEXT:    vmv4r.v v12, v81135; RV64-NEXT:    csrr a2, vlenb1136; RV64-NEXT:    li a3, 851137; RV64-NEXT:    mul a2, a2, a31138; RV64-NEXT:    add a2, sp, a21139; RV64-NEXT:    addi a2, a2, 161140; RV64-NEXT:    vl8r.v v16, (a2) # vscale x 64-byte Folded Reload1141; RV64-NEXT:    vmerge.vvm v16, v16, v24, v01142; RV64-NEXT:    csrr a2, vlenb1143; RV64-NEXT:    li a3, 291144; RV64-NEXT:    mul a2, a2, a31145; RV64-NEXT:    add a2, sp, a21146; RV64-NEXT:    addi a2, a2, 161147; RV64-NEXT:    vs8r.v v16, (a2) # vscale x 64-byte Folded Spill1148; RV64-NEXT:    vmv1r.v v0, v21149; RV64-NEXT:    csrr a2, vlenb1150; RV64-NEXT:    li a3, 451151; RV64-NEXT:    mul a2, a2, a31152; RV64-NEXT:    add a2, sp, a21153; RV64-NEXT:    addi a2, a2, 161154; RV64-NEXT:    vs8r.v v8, (a2) # vscale x 64-byte Folded Spill1155; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu1156; RV64-NEXT:    vslideup.vi v12, v8, 5, v0.t1157; RV64-NEXT:    vmv1r.v v0, v71158; RV64-NEXT:    csrr a2, vlenb1159; RV64-NEXT:    li a3, 771160; RV64-NEXT:    mul a2, a2, a31161; RV64-NEXT:    add a2, sp, a21162; RV64-NEXT:    addi a2, a2, 161163; RV64-NEXT:    vl8r.v v24, (a2) # vscale x 64-byte Folded Reload1164; RV64-NEXT:    vrgather.vi v12, v24, 4, v0.t1165; RV64-NEXT:    csrr a2, vlenb1166; RV64-NEXT:    slli a3, a2, 61167; RV64-NEXT:    add a2, a3, a21168; RV64-NEXT:    add a2, sp, a21169; RV64-NEXT:    addi a2, a2, 161170; RV64-NEXT:    vs4r.v v12, (a2) # vscale x 32-byte Folded Spill1171; RV64-NEXT:    vslidedown.vi v12, v8, 11172; RV64-NEXT:    vmv1r.v v0, v21173; RV64-NEXT:    vslideup.vi v12, v8, 4, v0.t1174; RV64-NEXT:    vmv1r.v v0, v71175; RV64-NEXT:    vrgather.vi v12, v24, 5, v0.t1176; RV64-NEXT:    csrr a2, vlenb1177; RV64-NEXT:    li a3, 251178; RV64-NEXT:    mul a2, a2, a31179; RV64-NEXT:    add a2, sp, a21180; RV64-NEXT:    addi a2, a2, 161181; RV64-NEXT:    vs4r.v v12, (a2) # vscale x 32-byte Folded Spill1182; RV64-NEXT:    lui a2, 81183; RV64-NEXT:    addi a2, a2, 5201184; RV64-NEXT:    vmv.s.x v0, a21185; RV64-NEXT:    vslideup.vi v12, v24, 61186; RV64-NEXT:    csrr a2, vlenb1187; RV64-NEXT:    li a3, 851188; RV64-NEXT:    mul a2, a2, a31189; RV64-NEXT:    add a2, sp, a21190; RV64-NEXT:    addi a2, a2, 161191; RV64-NEXT:    vl8r.v v16, (a2) # vscale x 64-byte Folded Reload1192; RV64-NEXT:    csrr a2, vlenb1193; RV64-NEXT:    li a3, 531194; RV64-NEXT:    mul a2, a2, a31195; RV64-NEXT:    add a2, sp, a21196; RV64-NEXT:    addi a2, a2, 161197; RV64-NEXT:    vl8r.v v24, (a2) # vscale x 64-byte Folded Reload1198; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1199; RV64-NEXT:    vmerge.vvm v16, v16, v24, v01200; RV64-NEXT:    csrr a2, vlenb1201; RV64-NEXT:    slli a3, a2, 41202; RV64-NEXT:    add a2, a3, a21203; RV64-NEXT:    add a2, sp, a21204; RV64-NEXT:    addi a2, a2, 161205; RV64-NEXT:    vs8r.v v16, (a2) # vscale x 64-byte Folded Spill1206; RV64-NEXT:    vmv1r.v v0, v71207; RV64-NEXT:    csrr a2, vlenb1208; RV64-NEXT:    li a3, 771209; RV64-NEXT:    mul a2, a2, a31210; RV64-NEXT:    add a2, sp, a21211; RV64-NEXT:    addi a2, a2, 161212; RV64-NEXT:    vl8r.v v16, (a2) # vscale x 64-byte Folded Reload1213; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu1214; RV64-NEXT:    vslideup.vi v12, v16, 1, v0.t1215; RV64-NEXT:    lui a2, %hi(.LCPI27_1)1216; RV64-NEXT:    addi a2, a2, %lo(.LCPI27_1)1217; RV64-NEXT:    li a3, 1921218; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1219; RV64-NEXT:    vle16.v v6, (a2)1220; RV64-NEXT:    vmv.s.x v0, a31221; RV64-NEXT:    csrr a2, vlenb1222; RV64-NEXT:    slli a2, a2, 41223; RV64-NEXT:    add a2, sp, a21224; RV64-NEXT:    addi a2, a2, 161225; RV64-NEXT:    vs1r.v v0, (a2) # vscale x 8-byte Folded Spill1226; RV64-NEXT:    csrr a2, vlenb1227; RV64-NEXT:    li a3, 451228; RV64-NEXT:    mul a2, a2, a31229; RV64-NEXT:    add a2, sp, a21230; RV64-NEXT:    addi a2, a2, 161231; RV64-NEXT:    vl8r.v v16, (a2) # vscale x 64-byte Folded Reload1232; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma1233; RV64-NEXT:    vrgather.vi v28, v16, 21234; RV64-NEXT:    vmerge.vvm v16, v28, v12, v01235; RV64-NEXT:    csrr a2, vlenb1236; RV64-NEXT:    li a3, 611237; RV64-NEXT:    mul a2, a2, a31238; RV64-NEXT:    add a2, sp, a21239; RV64-NEXT:    addi a2, a2, 161240; RV64-NEXT:    vs4r.v v16, (a2) # vscale x 32-byte Folded Spill1241; RV64-NEXT:    csrr a2, vlenb1242; RV64-NEXT:    slli a2, a2, 31243; RV64-NEXT:    add a2, sp, a21244; RV64-NEXT:    addi a2, a2, 161245; RV64-NEXT:    vl8r.v v16, (a2) # vscale x 64-byte Folded Reload1246; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1247; RV64-NEXT:    vrgatherei16.vv v24, v16, v61248; RV64-NEXT:    addi a2, sp, 161249; RV64-NEXT:    vs8r.v v24, (a2) # vscale x 64-byte Folded Spill1250; RV64-NEXT:    lui a2, %hi(.LCPI27_2)1251; RV64-NEXT:    addi a2, a2, %lo(.LCPI27_2)1252; RV64-NEXT:    li a3, 10401253; RV64-NEXT:    vmv.s.x v0, a31254; RV64-NEXT:    addi a1, a1, -20161255; RV64-NEXT:    csrr a3, vlenb1256; RV64-NEXT:    li a4, 851257; RV64-NEXT:    mul a3, a3, a41258; RV64-NEXT:    add a3, sp, a31259; RV64-NEXT:    addi a3, a3, 161260; RV64-NEXT:    vl8r.v v24, (a3) # vscale x 64-byte Folded Reload1261; RV64-NEXT:    csrr a3, vlenb1262; RV64-NEXT:    li a4, 531263; RV64-NEXT:    mul a3, a3, a41264; RV64-NEXT:    add a3, sp, a31265; RV64-NEXT:    addi a3, a3, 161266; RV64-NEXT:    vl8r.v v16, (a3) # vscale x 64-byte Folded Reload1267; RV64-NEXT:    vmerge.vvm v8, v24, v16, v01268; RV64-NEXT:    csrr a3, vlenb1269; RV64-NEXT:    slli a3, a3, 31270; RV64-NEXT:    add a3, sp, a31271; RV64-NEXT:    addi a3, a3, 161272; RV64-NEXT:    vs8r.v v8, (a3) # vscale x 64-byte Folded Spill1273; RV64-NEXT:    vmv.s.x v0, a11274; RV64-NEXT:    vle16.v v6, (a2)1275; RV64-NEXT:    li a1, 641276; RV64-NEXT:    vmerge.vvm v8, v24, v16, v01277; RV64-NEXT:    csrr a2, vlenb1278; RV64-NEXT:    li a3, 851279; RV64-NEXT:    mul a2, a2, a31280; RV64-NEXT:    add a2, sp, a21281; RV64-NEXT:    addi a2, a2, 161282; RV64-NEXT:    vs8r.v v8, (a2) # vscale x 64-byte Folded Spill1283; RV64-NEXT:    vmv.s.x v0, a11284; RV64-NEXT:    csrr a1, vlenb1285; RV64-NEXT:    li a2, 291286; RV64-NEXT:    mul a1, a1, a21287; RV64-NEXT:    add a1, sp, a11288; RV64-NEXT:    addi a1, a1, 161289; RV64-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload1290; RV64-NEXT:    vrgatherei16.vv v24, v16, v61291; RV64-NEXT:    csrr a1, vlenb1292; RV64-NEXT:    li a2, 771293; RV64-NEXT:    mul a1, a1, a21294; RV64-NEXT:    add a1, sp, a11295; RV64-NEXT:    addi a1, a1, 161296; RV64-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload1297; RV64-NEXT:    vmv4r.v v28, v81298; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu1299; RV64-NEXT:    vslideup.vi v28, v8, 5, v0.t1300; RV64-NEXT:    csrr a1, vlenb1301; RV64-NEXT:    li a2, 731302; RV64-NEXT:    mul a1, a1, a21303; RV64-NEXT:    add a1, sp, a11304; RV64-NEXT:    addi a1, a1, 161305; RV64-NEXT:    vl4r.v v8, (a1) # vscale x 32-byte Folded Reload1306; RV64-NEXT:    csrr a1, vlenb1307; RV64-NEXT:    li a2, 371308; RV64-NEXT:    mul a1, a1, a21309; RV64-NEXT:    add a1, sp, a11310; RV64-NEXT:    addi a1, a1, 161311; RV64-NEXT:    vl8r.v v0, (a1) # vscale x 64-byte Folded Reload1312; RV64-NEXT:    vsetivli zero, 6, e64, m4, tu, ma1313; RV64-NEXT:    vmv.v.v v8, v01314; RV64-NEXT:    csrr a1, vlenb1315; RV64-NEXT:    li a2, 731316; RV64-NEXT:    mul a1, a1, a21317; RV64-NEXT:    add a1, sp, a11318; RV64-NEXT:    addi a1, a1, 161319; RV64-NEXT:    vs4r.v v8, (a1) # vscale x 32-byte Folded Spill1320; RV64-NEXT:    csrr a1, vlenb1321; RV64-NEXT:    li a2, 691322; RV64-NEXT:    mul a1, a1, a21323; RV64-NEXT:    add a1, sp, a11324; RV64-NEXT:    addi a1, a1, 161325; RV64-NEXT:    vl4r.v v8, (a1) # vscale x 32-byte Folded Reload1326; RV64-NEXT:    addi a1, sp, 161327; RV64-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload1328; RV64-NEXT:    vmv.v.v v8, v161329; RV64-NEXT:    csrr a1, vlenb1330; RV64-NEXT:    li a2, 691331; RV64-NEXT:    mul a1, a1, a21332; RV64-NEXT:    add a1, sp, a11333; RV64-NEXT:    addi a1, a1, 161334; RV64-NEXT:    vs4r.v v8, (a1) # vscale x 32-byte Folded Spill1335; RV64-NEXT:    lui a1, %hi(.LCPI27_3)1336; RV64-NEXT:    addi a1, a1, %lo(.LCPI27_3)1337; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1338; RV64-NEXT:    vle16.v v20, (a1)1339; RV64-NEXT:    lui a1, %hi(.LCPI27_4)1340; RV64-NEXT:    addi a1, a1, %lo(.LCPI27_4)1341; RV64-NEXT:    vle16.v v8, (a1)1342; RV64-NEXT:    csrr a1, vlenb1343; RV64-NEXT:    li a2, 771344; RV64-NEXT:    mul a1, a1, a21345; RV64-NEXT:    add a1, sp, a11346; RV64-NEXT:    addi a1, a1, 161347; RV64-NEXT:    vs2r.v v8, (a1) # vscale x 16-byte Folded Spill1348; RV64-NEXT:    csrr a1, vlenb1349; RV64-NEXT:    slli a2, a1, 61350; RV64-NEXT:    add a1, a2, a11351; RV64-NEXT:    add a1, sp, a11352; RV64-NEXT:    addi a1, a1, 161353; RV64-NEXT:    vl4r.v v8, (a1) # vscale x 32-byte Folded Reload1354; RV64-NEXT:    vsetivli zero, 5, e64, m4, tu, ma1355; RV64-NEXT:    vmv.v.v v8, v241356; RV64-NEXT:    csrr a1, vlenb1357; RV64-NEXT:    slli a2, a1, 61358; RV64-NEXT:    add a1, a2, a11359; RV64-NEXT:    add a1, sp, a11360; RV64-NEXT:    addi a1, a1, 161361; RV64-NEXT:    vs4r.v v8, (a1) # vscale x 32-byte Folded Spill1362; RV64-NEXT:    csrr a1, vlenb1363; RV64-NEXT:    slli a2, a1, 41364; RV64-NEXT:    add a1, a2, a11365; RV64-NEXT:    add a1, sp, a11366; RV64-NEXT:    addi a1, a1, 161367; RV64-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload1368; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1369; RV64-NEXT:    vrgatherei16.vv v0, v8, v201370; RV64-NEXT:    csrr a1, vlenb1371; RV64-NEXT:    li a2, 251372; RV64-NEXT:    mul a1, a1, a21373; RV64-NEXT:    add a1, sp, a11374; RV64-NEXT:    addi a1, a1, 161375; RV64-NEXT:    vl4r.v v12, (a1) # vscale x 32-byte Folded Reload1376; RV64-NEXT:    vsetivli zero, 5, e64, m4, tu, ma1377; RV64-NEXT:    vmv.v.v v12, v01378; RV64-NEXT:    csrr a1, vlenb1379; RV64-NEXT:    slli a1, a1, 31380; RV64-NEXT:    add a1, sp, a11381; RV64-NEXT:    addi a1, a1, 161382; RV64-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload1383; RV64-NEXT:    csrr a1, vlenb1384; RV64-NEXT:    li a2, 771385; RV64-NEXT:    mul a1, a1, a21386; RV64-NEXT:    add a1, sp, a11387; RV64-NEXT:    addi a1, a1, 161388; RV64-NEXT:    vl2r.v v8, (a1) # vscale x 16-byte Folded Reload1389; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1390; RV64-NEXT:    vrgatherei16.vv v0, v16, v81391; RV64-NEXT:    lui a1, %hi(.LCPI27_5)1392; RV64-NEXT:    addi a1, a1, %lo(.LCPI27_5)1393; RV64-NEXT:    vle16.v v20, (a1)1394; RV64-NEXT:    csrr a1, vlenb1395; RV64-NEXT:    li a2, 611396; RV64-NEXT:    mul a1, a1, a21397; RV64-NEXT:    add a1, sp, a11398; RV64-NEXT:    addi a1, a1, 161399; RV64-NEXT:    vl4r.v v8, (a1) # vscale x 32-byte Folded Reload1400; RV64-NEXT:    vsetivli zero, 5, e64, m4, tu, ma1401; RV64-NEXT:    vmv.v.v v8, v01402; RV64-NEXT:    csrr a1, vlenb1403; RV64-NEXT:    li a2, 611404; RV64-NEXT:    mul a1, a1, a21405; RV64-NEXT:    add a1, sp, a11406; RV64-NEXT:    addi a1, a1, 161407; RV64-NEXT:    vs4r.v v8, (a1) # vscale x 32-byte Folded Spill1408; RV64-NEXT:    csrr a1, vlenb1409; RV64-NEXT:    li a2, 451410; RV64-NEXT:    mul a1, a1, a21411; RV64-NEXT:    add a1, sp, a11412; RV64-NEXT:    addi a1, a1, 161413; RV64-NEXT:    vl8r.v v0, (a1) # vscale x 64-byte Folded Reload1414; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma1415; RV64-NEXT:    vrgather.vi v8, v0, 31416; RV64-NEXT:    csrr a1, vlenb1417; RV64-NEXT:    slli a1, a1, 41418; RV64-NEXT:    add a1, sp, a11419; RV64-NEXT:    addi a1, a1, 161420; RV64-NEXT:    vl1r.v v0, (a1) # vscale x 8-byte Folded Reload1421; RV64-NEXT:    vmerge.vvm v8, v8, v28, v01422; RV64-NEXT:    csrr a1, vlenb1423; RV64-NEXT:    li a2, 851424; RV64-NEXT:    mul a1, a1, a21425; RV64-NEXT:    add a1, sp, a11426; RV64-NEXT:    addi a1, a1, 161427; RV64-NEXT:    vl8r.v v0, (a1) # vscale x 64-byte Folded Reload1428; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1429; RV64-NEXT:    vrgatherei16.vv v24, v0, v201430; RV64-NEXT:    vsetivli zero, 5, e64, m4, tu, ma1431; RV64-NEXT:    vmv.v.v v8, v241432; RV64-NEXT:    addi a1, a0, 3201433; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma1434; RV64-NEXT:    vse64.v v8, (a1)1435; RV64-NEXT:    addi a1, a0, 2561436; RV64-NEXT:    csrr a2, vlenb1437; RV64-NEXT:    li a3, 611438; RV64-NEXT:    mul a2, a2, a31439; RV64-NEXT:    add a2, sp, a21440; RV64-NEXT:    addi a2, a2, 161441; RV64-NEXT:    vl4r.v v8, (a2) # vscale x 32-byte Folded Reload1442; RV64-NEXT:    vse64.v v8, (a1)1443; RV64-NEXT:    addi a1, a0, 1921444; RV64-NEXT:    vse64.v v12, (a1)1445; RV64-NEXT:    addi a1, a0, 1281446; RV64-NEXT:    csrr a2, vlenb1447; RV64-NEXT:    slli a3, a2, 61448; RV64-NEXT:    add a2, a3, a21449; RV64-NEXT:    add a2, sp, a21450; RV64-NEXT:    addi a2, a2, 161451; RV64-NEXT:    vl4r.v v8, (a2) # vscale x 32-byte Folded Reload1452; RV64-NEXT:    vse64.v v8, (a1)1453; RV64-NEXT:    addi a1, a0, 641454; RV64-NEXT:    csrr a2, vlenb1455; RV64-NEXT:    li a3, 691456; RV64-NEXT:    mul a2, a2, a31457; RV64-NEXT:    add a2, sp, a21458; RV64-NEXT:    addi a2, a2, 161459; RV64-NEXT:    vl4r.v v8, (a2) # vscale x 32-byte Folded Reload1460; RV64-NEXT:    vse64.v v8, (a1)1461; RV64-NEXT:    csrr a1, vlenb1462; RV64-NEXT:    li a2, 731463; RV64-NEXT:    mul a1, a1, a21464; RV64-NEXT:    add a1, sp, a11465; RV64-NEXT:    addi a1, a1, 161466; RV64-NEXT:    vl4r.v v8, (a1) # vscale x 32-byte Folded Reload1467; RV64-NEXT:    vse64.v v8, (a0)1468; RV64-NEXT:    csrr a0, vlenb1469; RV64-NEXT:    li a1, 931470; RV64-NEXT:    mul a0, a0, a11471; RV64-NEXT:    add sp, sp, a01472; RV64-NEXT:    .cfi_def_cfa sp, 161473; RV64-NEXT:    addi sp, sp, 161474; RV64-NEXT:    .cfi_def_cfa_offset 01475; RV64-NEXT:    ret1476  %interleaved.vec = load <48 x i64>, ptr %ptr1477  %v0 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 0, i32 6, i32 12, i32 18, i32 24, i32 30, i32 36, i32 42>1478  %v1 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 1, i32 7, i32 13, i32 19, i32 25, i32 31, i32 37, i32 43>1479  %v2 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 2, i32 8, i32 14, i32 20, i32 26, i32 32, i32 38, i32 44>1480  %v3 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 3, i32 9, i32 15, i32 21, i32 27, i32 33, i32 39, i32 45>1481  %v4 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 4, i32 10, i32 16, i32 22, i32 28, i32 34, i32 40, i32 46>1482  %v5 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 5, i32 11, i32 17, i32 23, i32 29, i32 35, i32 41, i32 47>1483  %res0 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} poison, <8 x i64> %v0, 01484  %res1 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res0, <8 x i64> %v1, 11485  %res2 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res1, <8 x i64> %v2, 21486  %res3 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res2, <8 x i64> %v3, 31487  %res4 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res3, <8 x i64> %v4, 41488  %res5 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res4, <8 x i64> %v5, 51489  ret {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res51490}1491 1492 1493; ------------------------------------------------------------------------------1494; Stores1495; ------------------------------------------------------------------------------1496 1497define void @store_factor2(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1) {1498; CHECK-LABEL: store_factor2:1499; CHECK:       # %bb.0:1500; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1501; CHECK-NEXT:    vsseg2e32.v v8, (a0)1502; CHECK-NEXT:    ret1503  %interleaved.vec = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>1504  store <8 x i32> %interleaved.vec, ptr %ptr1505  ret void1506}1507 1508define void @store_factor3(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {1509; CHECK-LABEL: store_factor3:1510; CHECK:       # %bb.0:1511; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1512; CHECK-NEXT:    vsseg3e32.v v8, (a0)1513; CHECK-NEXT:    ret1514  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1515  %s1 = shufflevector <4 x i32> %v2, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1516  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>1517  store <12 x i32> %interleaved.vec, ptr %ptr1518  ret void1519}1520 1521define void @store_factor4(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {1522; CHECK-LABEL: store_factor4:1523; CHECK:       # %bb.0:1524; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1525; CHECK-NEXT:    vsseg4e32.v v8, (a0)1526; CHECK-NEXT:    ret1527  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1528  %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1529  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>1530  store <16 x i32> %interleaved.vec, ptr %ptr1531  ret void1532}1533 1534define void @store_factor5(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4) {1535; CHECK-LABEL: store_factor5:1536; CHECK:       # %bb.0:1537; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1538; CHECK-NEXT:    vsseg5e32.v v8, (a0)1539; CHECK-NEXT:    ret1540  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1541  %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1542  %s2 = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1543  %s3 = shufflevector <4 x i32> %v4, <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1544  %interleaved.vec = shufflevector <16 x i32> %s2, <16 x i32> %s3, <20 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 1, i32 5, i32 9, i32 13, i32 17, i32 2, i32 6, i32 10, i32 14, i32 18, i32 3, i32 7, i32 11, i32 15, i32 19>1545  store <20 x i32> %interleaved.vec, ptr %ptr1546  ret void1547}1548 1549define void @store_factor6(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5) {1550; CHECK-LABEL: store_factor6:1551; CHECK:       # %bb.0:1552; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1553; CHECK-NEXT:    vsseg6e16.v v8, (a0)1554; CHECK-NEXT:    ret1555  %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1556  %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1557  %s2 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1558  %s3 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1559  %interleaved.vec = shufflevector <8 x i16> %s2, <8 x i16> %s3, <12 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11>1560  store <12 x i16> %interleaved.vec, ptr %ptr1561  ret void1562}1563 1564define void @store_factor7(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5, <2 x i16> %v6) {1565; CHECK-LABEL: store_factor7:1566; CHECK:       # %bb.0:1567; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1568; CHECK-NEXT:    vsseg7e16.v v8, (a0)1569; CHECK-NEXT:    ret1570  %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1571  %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1572  %s2 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1573  %s3 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1574  %s4 = shufflevector <2 x i16> %v6, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>1575  %s5 = shufflevector <4 x i16> %s2, <4 x i16> %s4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 poison, i32 poison>1576  %interleaved.vec = shufflevector <8 x i16> %s3, <8 x i16> %s5, <14 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13>1577  store <14 x i16> %interleaved.vec, ptr %ptr1578  ret void1579}1580 1581define void @store_factor8(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5, <2 x i16> %v6, <2 x i16> %v7) {1582; CHECK-LABEL: store_factor8:1583; CHECK:       # %bb.0:1584; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1585; CHECK-NEXT:    vsseg8e16.v v8, (a0)1586; CHECK-NEXT:    ret1587  %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1588  %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1589  %s2 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1590  %s3 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1591  %s4 = shufflevector <2 x i16> %v6, <2 x i16> %v7, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1592  %s5 = shufflevector <4 x i16> %s2, <4 x i16> %s4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1593  %interleaved.vec = shufflevector <8 x i16> %s3, <8 x i16> %s5, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>1594  store <16 x i16> %interleaved.vec, ptr %ptr1595  ret void1596}1597 1598define void @vpstore_factor2(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1) {1599; CHECK-LABEL: vpstore_factor2:1600; CHECK:       # %bb.0:1601; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1602; CHECK-NEXT:    vsseg2e32.v v8, (a0)1603; CHECK-NEXT:    ret1604  %interleaved.vec = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>1605  tail call void @llvm.vp.store.v8i32.p0(<8 x i32> %interleaved.vec, ptr %ptr, <8 x i1> splat (i1 true), i32 8)1606  ret void1607}1608 1609define void @vpstore_factor2_interleaved_mask_intrinsic(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i1> %m) {1610; CHECK-LABEL: vpstore_factor2_interleaved_mask_intrinsic:1611; CHECK:       # %bb.0:1612; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1613; CHECK-NEXT:    vsseg2e32.v v8, (a0), v0.t1614; CHECK-NEXT:    ret1615  %interleaved.mask = call <8 x i1> @llvm.vector.interleave2(<4 x i1> %m, <4 x i1> %m)1616  %interleaved.vec = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>1617  tail call void @llvm.vp.store.v8i32.p0(<8 x i32> %interleaved.vec, ptr %ptr, <8 x i1> %interleaved.mask, i32 8)1618  ret void1619}1620 1621 1622define void @vpstore_factor3(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {1623; CHECK-LABEL: vpstore_factor3:1624; CHECK:       # %bb.0:1625; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1626; CHECK-NEXT:    vsseg3e32.v v8, (a0)1627; CHECK-NEXT:    ret1628  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1629  %s1 = shufflevector <4 x i32> %v2, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1630  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>1631  tail call void @llvm.vp.store.v12i32.p0(<12 x i32> %interleaved.vec, ptr %ptr, <12 x i1> splat (i1 true), i32 12)1632  ret void1633}1634 1635define void @vpstore_factor3_mask(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {1636; CHECK-LABEL: vpstore_factor3_mask:1637; CHECK:       # %bb.0:1638; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1639; CHECK-NEXT:    vmv.v.i v0, 51640; CHECK-NEXT:    vsseg3e32.v v8, (a0), v0.t1641; CHECK-NEXT:    ret1642  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1643  %s1 = shufflevector <4 x i32> %v2, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1644  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>1645  tail call void @llvm.vp.store.v12i32.p0(<12 x i32> %interleaved.vec, ptr %ptr, <12 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0>, i32 12)1646  ret void1647}1648 1649; mask = all ones, skip the last field.1650define void @vpstore_factor3_gap(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {1651; CHECK-LABEL: vpstore_factor3_gap:1652; CHECK:       # %bb.0:1653; CHECK-NEXT:    li a1, 121654; CHECK-NEXT:    vsetivli zero, 6, e32, m1, ta, ma1655; CHECK-NEXT:    vssseg2e32.v v8, (a0), a11656; CHECK-NEXT:    ret1657  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1658  %s1 = shufflevector <4 x i32> %v2, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1659  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>1660  tail call void @llvm.vp.store.v12i32.p0(<12 x i32> %interleaved.vec, ptr %ptr, <12 x i1> <i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0>, i32 12)1661  ret void1662}1663 1664; mask = 1010, skip the last field.1665define void @vpstore_factor3_gap_with_mask(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {1666; CHECK-LABEL: vpstore_factor3_gap_with_mask:1667; CHECK:       # %bb.0:1668; CHECK-NEXT:    vsetivli zero, 6, e32, m1, ta, ma1669; CHECK-NEXT:    vmv.v.i v0, 51670; CHECK-NEXT:    li a1, 121671; CHECK-NEXT:    vssseg2e32.v v8, (a0), a1, v0.t1672; CHECK-NEXT:    ret1673  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1674  %s1 = shufflevector <4 x i32> %v2, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1675  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>1676  tail call void @llvm.vp.store.v12i32.p0(<12 x i32> %interleaved.vec, ptr %ptr, <12 x i1> <i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0>, i32 12)1677  ret void1678}1679 1680define void @vpstore_factor4(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {1681; CHECK-LABEL: vpstore_factor4:1682; CHECK:       # %bb.0:1683; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1684; CHECK-NEXT:    vsseg4e32.v v8, (a0)1685; CHECK-NEXT:    ret1686  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1687  %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1688  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>1689  tail call void @llvm.vp.store.v16i32.p0(<16 x i32> %interleaved.vec, ptr %ptr, <16 x i1> splat (i1 true), i32 16)1690  ret void1691}1692 1693define void @vpstore_factor5(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4) {1694; CHECK-LABEL: vpstore_factor5:1695; CHECK:       # %bb.0:1696; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1697; CHECK-NEXT:    vsseg5e32.v v8, (a0)1698; CHECK-NEXT:    ret1699  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1700  %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1701  %s2 = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1702  %s3 = shufflevector <4 x i32> %v4, <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1703  %interleaved.vec = shufflevector <16 x i32> %s2, <16 x i32> %s3, <20 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 1, i32 5, i32 9, i32 13, i32 17, i32 2, i32 6, i32 10, i32 14, i32 18, i32 3, i32 7, i32 11, i32 15, i32 19>1704  tail call void @llvm.vp.store.v20i32.p0(<20 x i32> %interleaved.vec, ptr %ptr, <20 x i1> splat (i1 true), i32 20)1705  ret void1706}1707 1708define void @vpstore_factor6(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5) {1709; CHECK-LABEL: vpstore_factor6:1710; CHECK:       # %bb.0:1711; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1712; CHECK-NEXT:    vsseg6e16.v v8, (a0)1713; CHECK-NEXT:    ret1714  %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1715  %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1716  %s2 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1717  %s3 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1718  %interleaved.vec = shufflevector <8 x i16> %s2, <8 x i16> %s3, <12 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11>1719  tail call void @llvm.vp.store.v12i16.p0(<12 x i16> %interleaved.vec, ptr %ptr, <12 x i1> splat (i1 true), i32 12)1720  ret void1721}1722 1723define void @vpstore_factor7(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5, <2 x i16> %v6) {1724; CHECK-LABEL: vpstore_factor7:1725; CHECK:       # %bb.0:1726; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1727; CHECK-NEXT:    vsseg7e16.v v8, (a0)1728; CHECK-NEXT:    ret1729  %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1730  %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1731  %s2 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1732  %s3 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1733  %s4 = shufflevector <2 x i16> %v6, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>1734  %s5 = shufflevector <4 x i16> %s2, <4 x i16> %s4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 poison, i32 poison>1735  %interleaved.vec = shufflevector <8 x i16> %s3, <8 x i16> %s5, <14 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13>1736  tail call void @llvm.vp.store.v14i16.p0(<14 x i16> %interleaved.vec, ptr %ptr, <14 x i1> splat (i1 true), i32 14)1737  ret void1738}1739 1740define void @vpstore_factor7_masked(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5, <2 x i16> %v6, <2 x i1> %m) {1741; CHECK-LABEL: vpstore_factor7_masked:1742; CHECK:       # %bb.0:1743; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1744; CHECK-NEXT:    vsseg7e16.v v8, (a0), v0.t1745; CHECK-NEXT:    ret1746  %interleaved.mask = shufflevector <2 x i1> %m, <2 x i1> poison, <14 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>1747  %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1748  %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1749  %s2 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1750  %s3 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1751  %s4 = shufflevector <2 x i16> %v6, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>1752  %s5 = shufflevector <4 x i16> %s2, <4 x i16> %s4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 poison, i32 poison>1753  %interleaved.vec = shufflevector <8 x i16> %s3, <8 x i16> %s5, <14 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13>1754  tail call void @llvm.vp.store.v14i16.p0(<14 x i16> %interleaved.vec, ptr %ptr, <14 x i1> %interleaved.mask, i32 14)1755  ret void1756}1757 1758define void @vpstore_factor8(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5, <2 x i16> %v6, <2 x i16> %v7) {1759; CHECK-LABEL: vpstore_factor8:1760; CHECK:       # %bb.0:1761; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1762; CHECK-NEXT:    vsseg8e16.v v8, (a0)1763; CHECK-NEXT:    ret1764  %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1765  %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1766  %s2 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1767  %s3 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1768  %s4 = shufflevector <2 x i16> %v6, <2 x i16> %v7, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1769  %s5 = shufflevector <4 x i16> %s2, <4 x i16> %s4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1770  %interleaved.vec = shufflevector <8 x i16> %s3, <8 x i16> %s5, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>1771  tail call void @llvm.vp.store.v16i16.p0(<16 x i16> %interleaved.vec, ptr %ptr, <16 x i1> splat (i1 true), i32 16)1772  ret void1773}1774 1775define <4 x i32> @load_factor2_one_active(ptr %ptr) {1776; CHECK-LABEL: load_factor2_one_active:1777; CHECK:       # %bb.0:1778; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1779; CHECK-NEXT:    vlseg2e32.v v8, (a0)1780; CHECK-NEXT:    ret1781  %interleaved.vec = load <8 x i32>, ptr %ptr1782  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>1783  ret <4 x i32> %v01784}1785 1786 1787define <4 x i32> @load_factor3_one_active(ptr %ptr) {1788; CHECK-LABEL: load_factor3_one_active:1789; CHECK:       # %bb.0:1790; CHECK-NEXT:    li a1, 121791; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1792; CHECK-NEXT:    vlse32.v v8, (a0), a11793; CHECK-NEXT:    ret1794  %interleaved.vec = load <12 x i32>, ptr %ptr1795  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>1796  ret <4 x i32> %v01797}1798 1799define <4 x i32> @load_factor4_one_active(ptr %ptr) {1800; CHECK-LABEL: load_factor4_one_active:1801; CHECK:       # %bb.0:1802; CHECK-NEXT:    li a1, 161803; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1804; CHECK-NEXT:    vlse32.v v8, (a0), a11805; CHECK-NEXT:    ret1806  %interleaved.vec = load <16 x i32>, ptr %ptr1807  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>1808  ret <4 x i32> %v01809}1810 1811define <4 x i32> @load_factor5_one_active(ptr %ptr) {1812; CHECK-LABEL: load_factor5_one_active:1813; CHECK:       # %bb.0:1814; CHECK-NEXT:    li a1, 201815; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1816; CHECK-NEXT:    vlse32.v v8, (a0), a11817; CHECK-NEXT:    ret1818  %interleaved.vec = load <20 x i32>, ptr %ptr1819  %v0 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 0, i32 5, i32 10, i32 15>1820  ret <4 x i32> %v01821}1822 1823define <2 x i16> @load_factor6_one_active(ptr %ptr) {1824; CHECK-LABEL: load_factor6_one_active:1825; CHECK:       # %bb.0:1826; CHECK-NEXT:    addi a0, a0, 101827; CHECK-NEXT:    li a1, 121828; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1829; CHECK-NEXT:    vlse16.v v8, (a0), a11830; CHECK-NEXT:    ret1831  %interleaved.vec = load <12 x i16>, ptr %ptr1832  %v0 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 5, i32 11>1833  ret <2 x i16> %v01834}1835 1836define <4 x i8> @load_factor7_one_active(ptr %ptr) vscale_range(8,1024) {1837; CHECK-LABEL: load_factor7_one_active:1838; CHECK:       # %bb.0:1839; CHECK-NEXT:    addi a0, a0, 11840; CHECK-NEXT:    li a1, 71841; CHECK-NEXT:    vsetivli zero, 4, e8, mf8, ta, ma1842; CHECK-NEXT:    vlse8.v v8, (a0), a11843; CHECK-NEXT:    ret1844  %interleaved.vec = load <32 x i8>, ptr %ptr1845  %v0 = shufflevector <32 x i8> %interleaved.vec, <32 x i8> poison, <4 x i32> <i32 1, i32 8, i32 15, i32 22>1846  ret <4 x i8> %v01847}1848 1849define <4 x i8> @load_factor8_one_active(ptr %ptr) vscale_range(8,1024) {1850; CHECK-LABEL: load_factor8_one_active:1851; CHECK:       # %bb.0:1852; CHECK-NEXT:    li a1, 81853; CHECK-NEXT:    vsetivli zero, 4, e8, mf8, ta, ma1854; CHECK-NEXT:    vlse8.v v8, (a0), a11855; CHECK-NEXT:    ret1856  %interleaved.vec = load <32 x i8>, ptr %ptr1857  %v0 = shufflevector <32 x i8> %interleaved.vec, <32 x i8> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>1858  ret <4 x i8> %v01859}1860 1861define <4 x ptr> @load_factor3_one_active_ptr(ptr %ptr) {1862; RV32-LABEL: load_factor3_one_active_ptr:1863; RV32:       # %bb.0:1864; RV32-NEXT:    li a1, 121865; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1866; RV32-NEXT:    vlse32.v v8, (a0), a11867; RV32-NEXT:    ret1868;1869; RV64-LABEL: load_factor3_one_active_ptr:1870; RV64:       # %bb.0:1871; RV64-NEXT:    li a1, 241872; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma1873; RV64-NEXT:    vlse64.v v8, (a0), a11874; RV64-NEXT:    ret1875  %interleaved.vec = load <12 x ptr>, ptr %ptr1876  %v0 = shufflevector <12 x ptr> %interleaved.vec, <12 x ptr> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>1877  ret <4 x ptr> %v01878}1879 1880define void @load_factor4_one_active_storeback(ptr %ptr) {1881; CHECK-LABEL: load_factor4_one_active_storeback:1882; CHECK:       # %bb.0:1883; CHECK-NEXT:    li a1, 161884; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1885; CHECK-NEXT:    vlse32.v v8, (a0), a11886; CHECK-NEXT:    vse32.v v8, (a0)1887; CHECK-NEXT:    ret1888  %interleaved.vec = load <16 x i32>, ptr %ptr1889  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>1890  store <4 x i32> %v0, ptr %ptr1891  ret void1892}1893 1894; TODO: This should be a strided load1895define void @load_factor4_one_active_storeback_full(ptr %ptr) {1896; CHECK-LABEL: load_factor4_one_active_storeback_full:1897; CHECK:       # %bb.0:1898; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma1899; CHECK-NEXT:    vle32.v v8, (a0)1900; CHECK-NEXT:    vsetivli zero, 4, e32, m2, ta, ma1901; CHECK-NEXT:    vslidedown.vi v12, v8, 41902; CHECK-NEXT:    vmv1r.v v13, v81903; CHECK-NEXT:    vmv1r.v v14, v121904; CHECK-NEXT:    vsetivli zero, 4, e32, m4, ta, ma1905; CHECK-NEXT:    vslidedown.vi v16, v8, 81906; CHECK-NEXT:    vmv1r.v v15, v161907; CHECK-NEXT:    vslidedown.vi v16, v8, 121908; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1909; CHECK-NEXT:    vsseg4e32.v v13, (a0)1910; CHECK-NEXT:    ret1911  %interleaved.vec = load <16 x i32>, ptr %ptr1912  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1913  store <16 x i32> %v0, ptr %ptr1914  ret void1915}1916 1917define <4 x i32> @vp_load_factor3_one_active(ptr %ptr) {1918; CHECK-LABEL: vp_load_factor3_one_active:1919; CHECK:       # %bb.0:1920; CHECK-NEXT:    li a1, 121921; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1922; CHECK-NEXT:    vlse32.v v8, (a0), a11923; CHECK-NEXT:    ret1924  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1>  splat (i1 true), i32 12)1925  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>1926  ret <4 x i32> %v01927}1928 1929define <4 x i32> @vp_load_factor5_one_active(ptr %ptr) {1930; CHECK-LABEL: vp_load_factor5_one_active:1931; CHECK:       # %bb.0:1932; CHECK-NEXT:    li a1, 201933; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1934; CHECK-NEXT:    vlse32.v v8, (a0), a11935; CHECK-NEXT:    ret1936 %interleaved.vec = tail call <20 x i32> @llvm.vp.load.v20i32.p0(ptr %ptr, <20 x i1>  splat (i1 true), i32 20)1937  %v0 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 0, i32 5, i32 10, i32 15>1938  ret <4 x i32> %v01939}1940 1941define void @store_factor4_one_active(ptr %ptr, <4 x i32> %v) {1942; CHECK-LABEL: store_factor4_one_active:1943; CHECK:       # %bb.0:1944; CHECK-NEXT:    li a1, 161945; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1946; CHECK-NEXT:    vsse32.v v8, (a0), a11947; CHECK-NEXT:    ret1948  %v0 = shufflevector <4 x i32> %v, <4 x i32> poison, <16 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 3,  i32 poison, i32 poison, i32 poison>1949  store <16 x i32> %v0, ptr %ptr1950  ret void1951}1952 1953define void @vpstore_factor4_one_active(ptr %ptr, <4 x i32> %v) {1954; CHECK-LABEL: vpstore_factor4_one_active:1955; CHECK:       # %bb.0:1956; CHECK-NEXT:    li a1, 161957; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1958; CHECK-NEXT:    vsse32.v v8, (a0), a11959; CHECK-NEXT:    ret1960  %v0 = shufflevector <4 x i32> %v, <4 x i32> poison, <16 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 3,  i32 poison, i32 poison, i32 poison>1961  tail call void @llvm.vp.store.v16i32.p0(<16 x i32> %v0, ptr %ptr, <16 x i1> splat (i1 true), i32 16)1962  ret void1963}1964 1965define void @store_factor4_one_active_idx1(ptr %ptr, <4 x i32> %v) {1966; CHECK-LABEL: store_factor4_one_active_idx1:1967; CHECK:       # %bb.0:1968; CHECK-NEXT:    addi a0, a0, 41969; CHECK-NEXT:    li a1, 161970; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1971; CHECK-NEXT:    vsse32.v v8, (a0), a11972; CHECK-NEXT:    ret1973  %v0 = shufflevector <4 x i32> %v, <4 x i32> poison, <16 x i32> <i32 poison, i32 0, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 3,  i32 poison, i32 poison>1974  store <16 x i32> %v0, ptr %ptr1975  ret void1976}1977 1978define void @store_factor4_one_active_fullwidth(ptr %ptr, <16 x i32> %v) {1979; CHECK-LABEL: store_factor4_one_active_fullwidth:1980; CHECK:       # %bb.0:1981; CHECK-NEXT:    li a1, 161982; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1983; CHECK-NEXT:    vsse32.v v8, (a0), a11984; CHECK-NEXT:    ret1985  %v0 = shufflevector <16 x i32> %v, <16 x i32> poison, <16 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 3,  i32 poison, i32 poison, i32 poison>1986  store <16 x i32> %v0, ptr %ptr1987  ret void1988}1989 1990define void @store_factor4_one_active_slidedown(ptr %ptr, <4 x i32> %v) {1991; CHECK-LABEL: store_factor4_one_active_slidedown:1992; CHECK:       # %bb.0:1993; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1994; CHECK-NEXT:    vslidedown.vi v8, v8, 11995; CHECK-NEXT:    li a1, 161996; CHECK-NEXT:    vsse32.v v8, (a0), a11997; CHECK-NEXT:    ret1998  %v0 = shufflevector <4 x i32> %v, <4 x i32> poison, <16 x i32> <i32 1, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 poison, i32 4,  i32 poison, i32 poison, i32 poison>1999  store <16 x i32> %v0, ptr %ptr2000  ret void2001}2002 2003define void @store_factor4_one_active_ptr(ptr %ptr, <4 x ptr> %v) {2004; RV32-LABEL: store_factor4_one_active_ptr:2005; RV32:       # %bb.0:2006; RV32-NEXT:    li a1, 162007; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2008; RV32-NEXT:    vsse32.v v8, (a0), a12009; RV32-NEXT:    ret2010;2011; RV64-LABEL: store_factor4_one_active_ptr:2012; RV64:       # %bb.0:2013; RV64-NEXT:    li a1, 322014; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma2015; RV64-NEXT:    vsse64.v v8, (a0), a12016; RV64-NEXT:    ret2017  %v0 = shufflevector <4 x ptr> %v, <4 x ptr> poison, <16 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 3,  i32 poison, i32 poison, i32 poison>2018  store <16 x ptr> %v0, ptr %ptr2019  ret void2020}2021 2022; Negative tests2023 2024define {<4 x i32>, <4 x i32>, <4 x i32>} @invalid_vp_mask(ptr %ptr) {2025; RV32-LABEL: invalid_vp_mask:2026; RV32:       # %bb.0:2027; RV32-NEXT:    li a1, 732028; RV32-NEXT:    vsetivli zero, 1, e8, m1, ta, ma2029; RV32-NEXT:    vmv.s.x v11, a12030; RV32-NEXT:    lui a1, 12031; RV32-NEXT:    vmv.v.i v10, 82032; RV32-NEXT:    addi a1, a1, -432033; RV32-NEXT:    vsetvli zero, zero, e16, m2, ta, ma2034; RV32-NEXT:    vmv.s.x v0, a12035; RV32-NEXT:    li a1, 1462036; RV32-NEXT:    vsetivli zero, 12, e32, m4, ta, ma2037; RV32-NEXT:    vle32.v v12, (a0), v0.t2038; RV32-NEXT:    li a0, 362039; RV32-NEXT:    vmv.s.x v20, a12040; RV32-NEXT:    lui a1, %hi(.LCPI65_0)2041; RV32-NEXT:    addi a1, a1, %lo(.LCPI65_0)2042; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2043; RV32-NEXT:    vle16.v v21, (a1)2044; RV32-NEXT:    vcompress.vm v8, v12, v112045; RV32-NEXT:    vsetivli zero, 8, e32, m4, ta, ma2046; RV32-NEXT:    vslidedown.vi v16, v12, 82047; RV32-NEXT:    vmv1r.v v0, v102048; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu2049; RV32-NEXT:    vrgather.vi v8, v16, 1, v0.t2050; RV32-NEXT:    vcompress.vm v14, v12, v202051; RV32-NEXT:    vrgather.vi v14, v16, 2, v0.t2052; RV32-NEXT:    vmv.s.x v0, a02053; RV32-NEXT:    vmerge.vvm v12, v16, v12, v02054; RV32-NEXT:    vrgatherei16.vv v10, v12, v212055; RV32-NEXT:    vmv1r.v v9, v142056; RV32-NEXT:    ret2057;2058; RV64-LABEL: invalid_vp_mask:2059; RV64:       # %bb.0:2060; RV64-NEXT:    li a1, 732061; RV64-NEXT:    vsetivli zero, 1, e8, m1, ta, ma2062; RV64-NEXT:    vmv.s.x v11, a12063; RV64-NEXT:    li a1, 1462064; RV64-NEXT:    vmv.s.x v20, a12065; RV64-NEXT:    lui a1, 12066; RV64-NEXT:    vmv.v.i v10, 82067; RV64-NEXT:    addi a1, a1, -432068; RV64-NEXT:    vsetvli zero, zero, e16, m2, ta, ma2069; RV64-NEXT:    vmv.s.x v0, a12070; RV64-NEXT:    li a1, 362071; RV64-NEXT:    vsetivli zero, 12, e32, m4, ta, ma2072; RV64-NEXT:    vle32.v v12, (a0), v0.t2073; RV64-NEXT:    li a0, 32074; RV64-NEXT:    slli a0, a0, 322075; RV64-NEXT:    addi a0, a0, 52076; RV64-NEXT:    slli a0, a0, 162077; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2078; RV64-NEXT:    vcompress.vm v8, v12, v112079; RV64-NEXT:    vsetivli zero, 8, e32, m4, ta, ma2080; RV64-NEXT:    vslidedown.vi v16, v12, 82081; RV64-NEXT:    vmv1r.v v0, v102082; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, mu2083; RV64-NEXT:    vrgather.vi v8, v16, 1, v0.t2084; RV64-NEXT:    vcompress.vm v14, v12, v202085; RV64-NEXT:    vrgather.vi v14, v16, 2, v0.t2086; RV64-NEXT:    vmv.s.x v0, a12087; RV64-NEXT:    addi a0, a0, 22088; RV64-NEXT:    vmerge.vvm v12, v16, v12, v02089; RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, ma2090; RV64-NEXT:    vmv.v.x v9, a02091; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2092; RV64-NEXT:    vrgatherei16.vv v10, v12, v92093; RV64-NEXT:    vmv1r.v v9, v142094; RV64-NEXT:    ret2095  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> <i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>, i32 12)2096  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>2097  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>2098  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>2099  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02100  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12101  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 22102  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res22103}2104 2105define {<4 x i32>, <4 x i32>, <4 x i32>} @invalid_vp_evl(ptr %ptr) {2106; RV32-LABEL: invalid_vp_evl:2107; RV32:       # %bb.0:2108; RV32-NEXT:    vsetivli zero, 10, e32, m4, ta, ma2109; RV32-NEXT:    vle32.v v12, (a0)2110; RV32-NEXT:    li a0, 732111; RV32-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma2112; RV32-NEXT:    vmv.v.i v0, 82113; RV32-NEXT:    vmv.s.x v10, a02114; RV32-NEXT:    li a0, 1462115; RV32-NEXT:    vmv.s.x v11, a02116; RV32-NEXT:    lui a0, %hi(.LCPI66_0)2117; RV32-NEXT:    addi a0, a0, %lo(.LCPI66_0)2118; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2119; RV32-NEXT:    vle16.v v20, (a0)2120; RV32-NEXT:    li a0, 362121; RV32-NEXT:    vcompress.vm v8, v12, v102122; RV32-NEXT:    vsetivli zero, 8, e32, m4, ta, ma2123; RV32-NEXT:    vslidedown.vi v16, v12, 82124; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu2125; RV32-NEXT:    vrgather.vi v8, v16, 1, v0.t2126; RV32-NEXT:    vcompress.vm v14, v12, v112127; RV32-NEXT:    vrgather.vi v14, v16, 2, v0.t2128; RV32-NEXT:    vmv.s.x v0, a02129; RV32-NEXT:    vmerge.vvm v12, v16, v12, v02130; RV32-NEXT:    vrgatherei16.vv v10, v12, v202131; RV32-NEXT:    vmv1r.v v9, v142132; RV32-NEXT:    ret2133;2134; RV64-LABEL: invalid_vp_evl:2135; RV64:       # %bb.0:2136; RV64-NEXT:    vsetivli zero, 10, e32, m4, ta, ma2137; RV64-NEXT:    vle32.v v12, (a0)2138; RV64-NEXT:    li a0, 732139; RV64-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma2140; RV64-NEXT:    vmv.v.i v0, 82141; RV64-NEXT:    vmv.s.x v10, a02142; RV64-NEXT:    li a0, 1462143; RV64-NEXT:    vmv.s.x v11, a02144; RV64-NEXT:    li a0, 362145; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2146; RV64-NEXT:    vcompress.vm v8, v12, v102147; RV64-NEXT:    vsetivli zero, 8, e32, m4, ta, ma2148; RV64-NEXT:    vslidedown.vi v16, v12, 82149; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, mu2150; RV64-NEXT:    vrgather.vi v8, v16, 1, v0.t2151; RV64-NEXT:    vcompress.vm v14, v12, v112152; RV64-NEXT:    vrgather.vi v14, v16, 2, v0.t2153; RV64-NEXT:    vmv.s.x v0, a02154; RV64-NEXT:    li a0, 32155; RV64-NEXT:    slli a0, a0, 322156; RV64-NEXT:    addi a0, a0, 52157; RV64-NEXT:    slli a0, a0, 162158; RV64-NEXT:    addi a0, a0, 22159; RV64-NEXT:    vmerge.vvm v12, v16, v12, v02160; RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, ma2161; RV64-NEXT:    vmv.v.x v9, a02162; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2163; RV64-NEXT:    vrgatherei16.vv v10, v12, v92164; RV64-NEXT:    vmv1r.v v9, v142165; RV64-NEXT:    ret2166  %interleaved.vec = tail call <12 x i32> @llvm.vp.load.v12i32.p0(ptr %ptr, <12 x i1> splat (i1 true), i32 10)2167  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>2168  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>2169  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>2170  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02171  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12172  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 22173  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res22174}2175 2176define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @maskedload_factor5(ptr %ptr) {2177; CHECK-LABEL: maskedload_factor5:2178; CHECK:       # %bb.0:2179; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2180; CHECK-NEXT:    vlseg5e32.v v8, (a0)2181; CHECK-NEXT:    ret2182  %interleaved.vec = tail call <20 x i32> @llvm.masked.load(ptr %ptr, i32 4, <20 x i1> splat (i1 true), <20 x i32> poison)2183  %v0 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 0, i32 5, i32 10, i32 15>2184  %v1 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 1, i32 6, i32 11, i32 16>2185  %v2 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 2, i32 7, i32 12, i32 17>2186  %v3 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 3, i32 8, i32 13, i32 18>2187  %v4 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 4, i32 9, i32 14, i32 19>2188  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02189  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12190  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 22191  %res3 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res2, <4 x i32> %v3, 32192  %res4 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res3, <4 x i32> %v4, 42193  ret {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res42194}2195 2196define void @maskedstore_factor2(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1) {2197; CHECK-LABEL: maskedstore_factor2:2198; CHECK:       # %bb.0:2199; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2200; CHECK-NEXT:    vsseg2e32.v v8, (a0)2201; CHECK-NEXT:    ret2202  %interleaved.vec = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>2203  tail call void @llvm.masked.store(<8 x i32> %interleaved.vec, ptr %ptr, i32 4, <8 x i1> splat (i1 true))2204  ret void2205}2206 2207; mask = all ones, skip the last field.2208define void @maskedstore_factor3_gap(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {2209; CHECK-LABEL: maskedstore_factor3_gap:2210; CHECK:       # %bb.0:2211; CHECK-NEXT:    li a1, 122212; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2213; CHECK-NEXT:    vssseg2e32.v v8, (a0), a12214; CHECK-NEXT:    ret2215  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2216  %s1 = shufflevector <4 x i32> %v2, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>2217  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>2218  tail call void @llvm.masked.store(<12 x i32> %interleaved.vec, ptr %ptr, i32 4, <12 x i1> <i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0>)2219  ret void2220}2221 2222; mask = 1010, skip the last two fields.2223define void @maskedstore_factor4_gap_with_mask(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {2224; CHECK-LABEL: maskedstore_factor4_gap_with_mask:2225; CHECK:       # %bb.0:2226; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2227; CHECK-NEXT:    vmv.v.i v0, 52228; CHECK-NEXT:    li a1, 162229; CHECK-NEXT:    vssseg2e32.v v8, (a0), a1, v0.t2230; CHECK-NEXT:    ret2231  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2232  %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2233  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>2234  tail call void @llvm.masked.store(<16 x i32> %interleaved.vec, ptr %ptr, i32 4, <16 x i1> <i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0>)2235  ret void2236}2237 2238; mask = %m, skip the last two fields.2239define void @maskedstore_factor4_gap_by_intrinsic_with_mask(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i1> %m) {2240; CHECK-LABEL: maskedstore_factor4_gap_by_intrinsic_with_mask:2241; CHECK:       # %bb.0:2242; CHECK-NEXT:    li a1, 162243; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2244; CHECK-NEXT:    vssseg2e32.v v8, (a0), a1, v0.t2245; CHECK-NEXT:    ret2246  %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2247  %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2248  %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>2249  %interleaved.mask = call <16 x i1> @llvm.vector.interleave4(<4 x i1> %m, <4 x i1> %m, <4 x i1> splat (i1 false), <4 x i1> splat (i1 false))2250  tail call void @llvm.masked.store(<16 x i32> %interleaved.vec, ptr %ptr, i32 4, <16 x i1> %interleaved.mask)2251  ret void2252}2253 2254define {<4 x i32>, <4 x i32>, <4 x i32>} @maskedload_factor3_mask(ptr %ptr) {2255; CHECK-LABEL: maskedload_factor3_mask:2256; CHECK:       # %bb.0:2257; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2258; CHECK-NEXT:    vmv.v.i v0, 52259; CHECK-NEXT:    vlseg3e32.v v8, (a0), v0.t2260; CHECK-NEXT:    ret2261  %interleaved.vec = tail call <12 x i32> @llvm.masked.load.v12i32.p0(ptr %ptr, i32 4, <12 x i1> <i1 1,i1 1,i1 1,i1 0,i1 0,i1 0,i1 1,i1 1,i1 1,i1 0,i1 0,i1 0>, <12 x i32> poison)2262  ; mask = 10102263  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>2264  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>2265  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>2266  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02267  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12268  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 22269  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res22270}2271 2272define {<4 x i32>, <4 x i32>} @maskedload_factor3_skip_field(ptr %ptr) {2273; CHECK-LABEL: maskedload_factor3_skip_field:2274; CHECK:       # %bb.0:2275; CHECK-NEXT:    li a1, 122276; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2277; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a12278; CHECK-NEXT:    ret2279  %interleaved.vec = tail call <12 x i32> @llvm.masked.load.v12i32.p0(ptr %ptr, i32 4, <12 x i1> <i1 1,i1 1,i1 0,i1 1,i1 1,i1 0,i1 1,i1 1,i1 0,i1 1,i1 1,i1 0>, <12 x i32> poison)2280  ; mask = 1111, skip last field2281  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>2282  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>2283  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02284  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12285  ret {<4 x i32>, <4 x i32>} %res12286}2287 2288define {<4 x i32>, <4 x i32>} @maskedload_factor3_mask_skip_field(ptr %ptr) {2289; CHECK-LABEL: maskedload_factor3_mask_skip_field:2290; CHECK:       # %bb.0:2291; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2292; CHECK-NEXT:    vmv.v.i v0, 52293; CHECK-NEXT:    li a1, 122294; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1, v0.t2295; CHECK-NEXT:    ret2296  %interleaved.vec = tail call <12 x i32> @llvm.masked.load.v12i32.p0(ptr %ptr, i32 4, <12 x i1> <i1 1,i1 1,i1 0,i1 0,i1 0,i1 0,i1 1,i1 1,i1 0,i1 0,i1 0,i1 0>, <12 x i32> poison)2297  ; mask = 1010, skip the last field2298  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>2299  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>2300  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02301  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12302  ret {<4 x i32>, <4 x i32>} %res12303}2304 2305define {<4 x i32>, <4 x i32>} @maskedload_factor3_combined_mask_skip_field(ptr %ptr, <4 x i1> %mask) {2306; CHECK-LABEL: maskedload_factor3_combined_mask_skip_field:2307; CHECK:       # %bb.0:2308; CHECK-NEXT:    li a1, 122309; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2310; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1, v0.t2311; CHECK-NEXT:    ret2312  %interleaved.mask = shufflevector <4 x i1> %mask, <4 x i1> poison, <12 x i32> <i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3>2313  %combined = and <12 x i1> %interleaved.mask, <i1 true, i1 true, i1 false, i1 true, i1 true, i1 false, i1 true, i1 true, i1 false, i1 true, i1 true, i1 false>2314  %interleaved.vec = tail call <12 x i32> @llvm.masked.load.v12i32.p0(ptr %ptr, i32 4, <12 x i1> %combined, <12 x i32> poison)2315  ; mask = %mask, skip the last field2316  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>2317  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>2318  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02319  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12320  ret {<4 x i32>, <4 x i32>} %res12321}2322 2323define {<4 x i32>, <4 x i32>} @maskedload_factor4_combined_mask_multi_skip_fields(ptr %ptr, <4 x i1> %mask) {2324; CHECK-LABEL: maskedload_factor4_combined_mask_multi_skip_fields:2325; CHECK:       # %bb.0:2326; CHECK-NEXT:    li a1, 162327; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2328; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1, v0.t2329; CHECK-NEXT:    ret2330  %interleaved.mask = shufflevector <4 x i1> %mask, <4 x i1> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>2331  %combined = and <16 x i1> %interleaved.mask, <i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>2332  %combined1 = and <16 x i1> %combined, <i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true>2333  %interleaved.vec = tail call <16 x i32> @llvm.masked.load.v16i32.p0(ptr %ptr, i32 4, <16 x i1> %combined1, <16 x i32> poison)2334  ; mask = %mask, skip the last 2 fields2335  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>2336  %v1 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>2337  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02338  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12339  ret {<4 x i32>, <4 x i32>} %res12340}2341 2342define {<4 x i32>, <4 x i32>} @maskedload_factor4_combined_mask_multi_skip_fields_and_masks(ptr %ptr, <4 x i1> %mask, <4 x i1> %mask2) {2343; CHECK-LABEL: maskedload_factor4_combined_mask_multi_skip_fields_and_masks:2344; CHECK:       # %bb.0:2345; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2346; CHECK-NEXT:    vmand.mm v0, v0, v82347; CHECK-NEXT:    li a1, 162348; CHECK-NEXT:    vlsseg2e32.v v8, (a0), a1, v0.t2349; CHECK-NEXT:    ret2350  %interleaved.mask = shufflevector <4 x i1> %mask, <4 x i1> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>2351  %combined = and <16 x i1> %interleaved.mask, <i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>2352 2353  %interleaved.mask2 = shufflevector <4 x i1> %mask2, <4 x i1> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>2354  %combined1 = and <16 x i1> %interleaved.mask2, <i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true>2355 2356  %combined2 = and <16 x i1> %combined, %combined12357  %interleaved.vec = tail call <16 x i32> @llvm.masked.load.v16i32.p0(ptr %ptr, i32 4, <16 x i1> %combined2, <16 x i32> poison)2358  ; mask = %mask & %mask2, skip the last 2 fields2359  %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>2360  %v1 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>2361  %res0 = insertvalue {<4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02362  %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12363  ret {<4 x i32>, <4 x i32>} %res12364}2365 2366; We can only skip the last field for now.2367define {<4 x i32>, <4 x i32>, <4 x i32>} @maskedload_factor3_invalid_skip_field(ptr %ptr) {2368; RV32-LABEL: maskedload_factor3_invalid_skip_field:2369; RV32:       # %bb.0:2370; RV32-NEXT:    li a1, 732371; RV32-NEXT:    vsetivli zero, 1, e8, m1, ta, ma2372; RV32-NEXT:    vmv.s.x v11, a12373; RV32-NEXT:    lui a1, 12374; RV32-NEXT:    vmv.v.i v10, 82375; RV32-NEXT:    addi a1, a1, -11712376; RV32-NEXT:    vsetvli zero, zero, e16, m2, ta, ma2377; RV32-NEXT:    vmv.s.x v0, a12378; RV32-NEXT:    li a1, 1462379; RV32-NEXT:    vsetivli zero, 12, e32, m4, ta, ma2380; RV32-NEXT:    vle32.v v12, (a0), v0.t2381; RV32-NEXT:    li a0, 362382; RV32-NEXT:    vmv.s.x v20, a12383; RV32-NEXT:    lui a1, %hi(.LCPI78_0)2384; RV32-NEXT:    addi a1, a1, %lo(.LCPI78_0)2385; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2386; RV32-NEXT:    vle16.v v21, (a1)2387; RV32-NEXT:    vcompress.vm v8, v12, v112388; RV32-NEXT:    vsetivli zero, 8, e32, m4, ta, ma2389; RV32-NEXT:    vslidedown.vi v16, v12, 82390; RV32-NEXT:    vmv1r.v v0, v102391; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu2392; RV32-NEXT:    vrgather.vi v8, v16, 1, v0.t2393; RV32-NEXT:    vcompress.vm v14, v12, v202394; RV32-NEXT:    vrgather.vi v14, v16, 2, v0.t2395; RV32-NEXT:    vmv.s.x v0, a02396; RV32-NEXT:    vmerge.vvm v12, v16, v12, v02397; RV32-NEXT:    vrgatherei16.vv v10, v12, v212398; RV32-NEXT:    vmv1r.v v9, v142399; RV32-NEXT:    ret2400;2401; RV64-LABEL: maskedload_factor3_invalid_skip_field:2402; RV64:       # %bb.0:2403; RV64-NEXT:    li a1, 732404; RV64-NEXT:    vsetivli zero, 1, e8, m1, ta, ma2405; RV64-NEXT:    vmv.s.x v11, a12406; RV64-NEXT:    li a1, 1462407; RV64-NEXT:    vmv.s.x v20, a12408; RV64-NEXT:    lui a1, 12409; RV64-NEXT:    vmv.v.i v10, 82410; RV64-NEXT:    addi a1, a1, -11712411; RV64-NEXT:    vsetvli zero, zero, e16, m2, ta, ma2412; RV64-NEXT:    vmv.s.x v0, a12413; RV64-NEXT:    li a1, 362414; RV64-NEXT:    vsetivli zero, 12, e32, m4, ta, ma2415; RV64-NEXT:    vle32.v v12, (a0), v0.t2416; RV64-NEXT:    li a0, 32417; RV64-NEXT:    slli a0, a0, 322418; RV64-NEXT:    addi a0, a0, 52419; RV64-NEXT:    slli a0, a0, 162420; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2421; RV64-NEXT:    vcompress.vm v8, v12, v112422; RV64-NEXT:    vsetivli zero, 8, e32, m4, ta, ma2423; RV64-NEXT:    vslidedown.vi v16, v12, 82424; RV64-NEXT:    vmv1r.v v0, v102425; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, mu2426; RV64-NEXT:    vrgather.vi v8, v16, 1, v0.t2427; RV64-NEXT:    vcompress.vm v14, v12, v202428; RV64-NEXT:    vrgather.vi v14, v16, 2, v0.t2429; RV64-NEXT:    vmv.s.x v0, a12430; RV64-NEXT:    addi a0, a0, 22431; RV64-NEXT:    vmerge.vvm v12, v16, v12, v02432; RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, ma2433; RV64-NEXT:    vmv.v.x v9, a02434; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma2435; RV64-NEXT:    vrgatherei16.vv v10, v12, v92436; RV64-NEXT:    vmv1r.v v9, v142437; RV64-NEXT:    ret2438  %interleaved.vec = tail call <12 x i32> @llvm.masked.load.v12i32.p0(ptr %ptr, i32 4, <12 x i1> <i1 1,i1 0,i1 1,i1 1,i1 0,i1 1,i1 1,i1 0,i1 1,i1 1,i1 0,i1 1>, <12 x i32> poison)2439  %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>2440  %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>2441  %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>2442  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02443  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12444  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 22445  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res22446}2447 2448define {<4 x i32>, <4 x i32>, <4 x i32>} @maskedload_factor5_skip_fields(ptr %ptr) {2449  ; mask = 1111, skip the last two fields.2450; CHECK-LABEL: maskedload_factor5_skip_fields:2451; CHECK:       # %bb.0:2452; CHECK-NEXT:    li a1, 202453; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2454; CHECK-NEXT:    vlsseg3e32.v v8, (a0), a12455; CHECK-NEXT:    ret2456  %interleaved.vec = tail call <20 x i32> @llvm.masked.load(ptr %ptr, i32 4, <20 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0>, <20 x i32> poison)2457  %v0 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 0, i32 5, i32 10, i32 15>2458  %v1 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 1, i32 6, i32 11, i32 16>2459  %v2 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 2, i32 7, i32 12, i32 17>2460  %v3 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 3, i32 8, i32 13, i32 18>2461  %v4 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 4, i32 9, i32 14, i32 19>2462  %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} poison, <4 x i32> %v0, 02463  %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 12464  %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 22465  ret {<4 x i32>, <4 x i32>, <4 x i32>} %res22466}2467 2468