1953 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=riscv32 -mattr=+v -global-isel -stop-after=irtranslator \3; RUN: -verify-machineinstrs < %s | FileCheck -check-prefixes=RV32 %s4; RUN: llc -mtriple=riscv64 -mattr=+v -global-isel -stop-after=irtranslator \5; RUN: -verify-machineinstrs < %s | FileCheck -check-prefixes=RV64 %s6 7define <vscale x 1 x i1> @insertelement_nxv1i1_0() {8 ; RV32-LABEL: name: insertelement_nxv1i1_09 ; RV32: bb.1 (%ir-block.0):10 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s1>) = G_IMPLICIT_DEF11 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false12 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 013 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)14 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 1 x s1>)15 ; RV32-NEXT: PseudoRET implicit $v016 ;17 ; RV64-LABEL: name: insertelement_nxv1i1_018 ; RV64: bb.1 (%ir-block.0):19 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s1>) = G_IMPLICIT_DEF20 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false21 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 022 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)23 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 1 x s1>)24 ; RV64-NEXT: PseudoRET implicit $v025 %a = insertelement <vscale x 1 x i1> poison, i1 0, i32 026 ret <vscale x 1 x i1> %a27}28 29define <vscale x 1 x i1> @insertelement_nxv1i1_1() {30 ; RV32-LABEL: name: insertelement_nxv1i1_131 ; RV32: bb.1 (%ir-block.0):32 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s1>) = G_IMPLICIT_DEF33 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true34 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 035 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)36 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 1 x s1>)37 ; RV32-NEXT: PseudoRET implicit $v038 ;39 ; RV64-LABEL: name: insertelement_nxv1i1_140 ; RV64: bb.1 (%ir-block.0):41 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s1>) = G_IMPLICIT_DEF42 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true43 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 044 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)45 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 1 x s1>)46 ; RV64-NEXT: PseudoRET implicit $v047 %a = insertelement <vscale x 1 x i1> poison, i1 -1, i32 048 ret <vscale x 1 x i1> %a49}50 51define <vscale x 1 x i1> @insertelement_nxv1i1_2(i1 %x, i32 %idx) {52 ; RV32-LABEL: name: insertelement_nxv1i1_253 ; RV32: bb.1 (%ir-block.0):54 ; RV32-NEXT: liveins: $x10, $x1155 ; RV32-NEXT: {{ $}}56 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x1057 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)58 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x1159 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s1>) = G_IMPLICIT_DEF60 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[COPY1]](s32)61 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 1 x s1>)62 ; RV32-NEXT: PseudoRET implicit $v063 ;64 ; RV64-LABEL: name: insertelement_nxv1i1_265 ; RV64: bb.1 (%ir-block.0):66 ; RV64-NEXT: liveins: $x10, $x1167 ; RV64-NEXT: {{ $}}68 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1069 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s64)70 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1171 ; RV64-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)72 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s1>) = G_IMPLICIT_DEF73 ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]](s32)74 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[ZEXT]](s64)75 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 1 x s1>)76 ; RV64-NEXT: PseudoRET implicit $v077 %a = insertelement <vscale x 1 x i1> poison, i1 %x, i32 %idx78 ret <vscale x 1 x i1> %a79}80 81define <vscale x 2 x i1> @insertelement_nxv2i1_0() {82 ; RV32-LABEL: name: insertelement_nxv2i1_083 ; RV32: bb.1 (%ir-block.0):84 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s1>) = G_IMPLICIT_DEF85 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false86 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 187 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)88 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 2 x s1>)89 ; RV32-NEXT: PseudoRET implicit $v090 ;91 ; RV64-LABEL: name: insertelement_nxv2i1_092 ; RV64: bb.1 (%ir-block.0):93 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s1>) = G_IMPLICIT_DEF94 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false95 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 196 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)97 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 2 x s1>)98 ; RV64-NEXT: PseudoRET implicit $v099 %a = insertelement <vscale x 2 x i1> poison, i1 0, i32 1100 ret <vscale x 2 x i1> %a101}102 103define <vscale x 2 x i1> @insertelement_nxv2i1_1() {104 ; RV32-LABEL: name: insertelement_nxv2i1_1105 ; RV32: bb.1 (%ir-block.0):106 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s1>) = G_IMPLICIT_DEF107 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true108 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0109 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)110 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 2 x s1>)111 ; RV32-NEXT: PseudoRET implicit $v0112 ;113 ; RV64-LABEL: name: insertelement_nxv2i1_1114 ; RV64: bb.1 (%ir-block.0):115 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s1>) = G_IMPLICIT_DEF116 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true117 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0118 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)119 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 2 x s1>)120 ; RV64-NEXT: PseudoRET implicit $v0121 %a = insertelement <vscale x 2 x i1> poison, i1 -1, i32 0122 ret <vscale x 2 x i1> %a123}124 125define <vscale x 2 x i1> @insertelement_nxv2i1_2(i1 %x, i32 %idx) {126 ; RV32-LABEL: name: insertelement_nxv2i1_2127 ; RV32: bb.1 (%ir-block.0):128 ; RV32-NEXT: liveins: $x10, $x11129 ; RV32-NEXT: {{ $}}130 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10131 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)132 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11133 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s1>) = G_IMPLICIT_DEF134 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[COPY1]](s32)135 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 2 x s1>)136 ; RV32-NEXT: PseudoRET implicit $v0137 ;138 ; RV64-LABEL: name: insertelement_nxv2i1_2139 ; RV64: bb.1 (%ir-block.0):140 ; RV64-NEXT: liveins: $x10, $x11141 ; RV64-NEXT: {{ $}}142 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10143 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s64)144 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11145 ; RV64-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)146 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s1>) = G_IMPLICIT_DEF147 ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]](s32)148 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[ZEXT]](s64)149 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 2 x s1>)150 ; RV64-NEXT: PseudoRET implicit $v0151 %a = insertelement <vscale x 2 x i1> poison, i1 %x, i32 %idx152 ret <vscale x 2 x i1> %a153}154 155define <vscale x 4 x i1> @insertelement_nxv4i1_0() {156 ; RV32-LABEL: name: insertelement_nxv4i1_0157 ; RV32: bb.1 (%ir-block.0):158 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s1>) = G_IMPLICIT_DEF159 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false160 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2161 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)162 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)163 ; RV32-NEXT: PseudoRET implicit $v0164 ;165 ; RV64-LABEL: name: insertelement_nxv4i1_0166 ; RV64: bb.1 (%ir-block.0):167 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s1>) = G_IMPLICIT_DEF168 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false169 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2170 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)171 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)172 ; RV64-NEXT: PseudoRET implicit $v0173 %a = insertelement <vscale x 4 x i1> poison, i1 0, i32 2174 ret <vscale x 4 x i1> %a175}176 177define <vscale x 4 x i1> @insertelement_nxv4i1_1() {178 ; RV32-LABEL: name: insertelement_nxv4i1_1179 ; RV32: bb.1 (%ir-block.0):180 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s1>) = G_IMPLICIT_DEF181 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true182 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0183 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)184 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)185 ; RV32-NEXT: PseudoRET implicit $v0186 ;187 ; RV64-LABEL: name: insertelement_nxv4i1_1188 ; RV64: bb.1 (%ir-block.0):189 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s1>) = G_IMPLICIT_DEF190 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true191 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0192 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)193 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)194 ; RV64-NEXT: PseudoRET implicit $v0195 %a = insertelement <vscale x 4 x i1> poison, i1 -1, i32 0196 ret <vscale x 4 x i1> %a197}198 199define <vscale x 4 x i1> @insertelement_nxv4i1_2(i1 %x) {200 ; RV32-LABEL: name: insertelement_nxv4i1_2201 ; RV32: bb.1 (%ir-block.0):202 ; RV32-NEXT: liveins: $x10203 ; RV32-NEXT: {{ $}}204 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10205 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)206 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s1>) = G_IMPLICIT_DEF207 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0208 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[C]](s32)209 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)210 ; RV32-NEXT: PseudoRET implicit $v0211 ;212 ; RV64-LABEL: name: insertelement_nxv4i1_2213 ; RV64: bb.1 (%ir-block.0):214 ; RV64-NEXT: liveins: $x10215 ; RV64-NEXT: {{ $}}216 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10217 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s64)218 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s1>) = G_IMPLICIT_DEF219 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0220 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[C]](s64)221 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)222 ; RV64-NEXT: PseudoRET implicit $v0223 %a = insertelement <vscale x 4 x i1> poison, i1 %x, i32 0224 ret <vscale x 4 x i1> %a225}226 227define <vscale x 8 x i1> @insertelement_nxv8i1_0() {228 ; RV32-LABEL: name: insertelement_nxv8i1_0229 ; RV32: bb.1 (%ir-block.0):230 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s1>) = G_IMPLICIT_DEF231 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false232 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0233 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)234 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 8 x s1>)235 ; RV32-NEXT: PseudoRET implicit $v0236 ;237 ; RV64-LABEL: name: insertelement_nxv8i1_0238 ; RV64: bb.1 (%ir-block.0):239 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s1>) = G_IMPLICIT_DEF240 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false241 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0242 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)243 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 8 x s1>)244 ; RV64-NEXT: PseudoRET implicit $v0245 %a = insertelement <vscale x 8 x i1> poison, i1 0, i32 0246 ret <vscale x 8 x i1> %a247}248 249define <vscale x 8 x i1> @insertelement_nxv8i1_1() {250 ; RV32-LABEL: name: insertelement_nxv8i1_1251 ; RV32: bb.1 (%ir-block.0):252 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s1>) = G_IMPLICIT_DEF253 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true254 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0255 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)256 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 8 x s1>)257 ; RV32-NEXT: PseudoRET implicit $v0258 ;259 ; RV64-LABEL: name: insertelement_nxv8i1_1260 ; RV64: bb.1 (%ir-block.0):261 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s1>) = G_IMPLICIT_DEF262 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true263 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0264 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)265 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 8 x s1>)266 ; RV64-NEXT: PseudoRET implicit $v0267 %a = insertelement <vscale x 8 x i1> poison, i1 -1, i32 0268 ret <vscale x 8 x i1> %a269}270 271define <vscale x 8 x i1> @insertelement_nxv8i1_2(i1 %x, i32 %idx) {272 ; RV32-LABEL: name: insertelement_nxv8i1_2273 ; RV32: bb.1 (%ir-block.0):274 ; RV32-NEXT: liveins: $x10, $x11275 ; RV32-NEXT: {{ $}}276 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10277 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)278 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11279 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s1>) = G_IMPLICIT_DEF280 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[COPY1]](s32)281 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 8 x s1>)282 ; RV32-NEXT: PseudoRET implicit $v0283 ;284 ; RV64-LABEL: name: insertelement_nxv8i1_2285 ; RV64: bb.1 (%ir-block.0):286 ; RV64-NEXT: liveins: $x10, $x11287 ; RV64-NEXT: {{ $}}288 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10289 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s64)290 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11291 ; RV64-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)292 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s1>) = G_IMPLICIT_DEF293 ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]](s32)294 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[ZEXT]](s64)295 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 8 x s1>)296 ; RV64-NEXT: PseudoRET implicit $v0297 %a = insertelement <vscale x 8 x i1> poison, i1 %x, i32 %idx298 ret <vscale x 8 x i1> %a299}300 301define <vscale x 16 x i1> @insertelement_nxv16i1_0() {302 ; RV32-LABEL: name: insertelement_nxv16i1_0303 ; RV32: bb.1 (%ir-block.0):304 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s1>) = G_IMPLICIT_DEF305 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false306 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 15307 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)308 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 16 x s1>)309 ; RV32-NEXT: PseudoRET implicit $v0310 ;311 ; RV64-LABEL: name: insertelement_nxv16i1_0312 ; RV64: bb.1 (%ir-block.0):313 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s1>) = G_IMPLICIT_DEF314 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false315 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 15316 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)317 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 16 x s1>)318 ; RV64-NEXT: PseudoRET implicit $v0319 %a = insertelement <vscale x 16 x i1> poison, i1 0, i32 15320 ret <vscale x 16 x i1> %a321}322 323define <vscale x 16 x i1> @insertelement_nxv16i1_1() {324 ; RV32-LABEL: name: insertelement_nxv16i1_1325 ; RV32: bb.1 (%ir-block.0):326 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s1>) = G_IMPLICIT_DEF327 ; RV32-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true328 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0329 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s32)330 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 16 x s1>)331 ; RV32-NEXT: PseudoRET implicit $v0332 ;333 ; RV64-LABEL: name: insertelement_nxv16i1_1334 ; RV64: bb.1 (%ir-block.0):335 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s1>) = G_IMPLICIT_DEF336 ; RV64-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true337 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0338 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s1), [[C1]](s64)339 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 16 x s1>)340 ; RV64-NEXT: PseudoRET implicit $v0341 %a = insertelement <vscale x 16 x i1> poison, i1 -1, i32 0342 ret <vscale x 16 x i1> %a343}344 345define <vscale x 16 x i1> @insertelement_nxv16i1_2(i1 %x, i32 %idx) {346 ; RV32-LABEL: name: insertelement_nxv16i1_2347 ; RV32: bb.1 (%ir-block.0):348 ; RV32-NEXT: liveins: $x10, $x11349 ; RV32-NEXT: {{ $}}350 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10351 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)352 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11353 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s1>) = G_IMPLICIT_DEF354 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[COPY1]](s32)355 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 16 x s1>)356 ; RV32-NEXT: PseudoRET implicit $v0357 ;358 ; RV64-LABEL: name: insertelement_nxv16i1_2359 ; RV64: bb.1 (%ir-block.0):360 ; RV64-NEXT: liveins: $x10, $x11361 ; RV64-NEXT: {{ $}}362 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10363 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s64)364 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11365 ; RV64-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)366 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s1>) = G_IMPLICIT_DEF367 ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]](s32)368 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s1>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s1), [[ZEXT]](s64)369 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 16 x s1>)370 ; RV64-NEXT: PseudoRET implicit $v0371 %a = insertelement <vscale x 16 x i1> poison, i1 %x, i32 %idx372 ret <vscale x 16 x i1> %a373}374 375define <vscale x 4 x i1> @insertelement_nxv4i1_3(<vscale x 4 x i1> %v, i1 %x) {376 ; RV32-LABEL: name: insertelement_nxv4i1_3377 ; RV32: bb.1 (%ir-block.0):378 ; RV32-NEXT: liveins: $v0, $x10379 ; RV32-NEXT: {{ $}}380 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v0381 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x10382 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY1]](s32)383 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0384 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[COPY]], [[TRUNC]](s1), [[C]](s32)385 ; RV32-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)386 ; RV32-NEXT: PseudoRET implicit $v0387 ;388 ; RV64-LABEL: name: insertelement_nxv4i1_3389 ; RV64: bb.1 (%ir-block.0):390 ; RV64-NEXT: liveins: $v0, $x10391 ; RV64-NEXT: {{ $}}392 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v0393 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x10394 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY1]](s64)395 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0396 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s1>) = G_INSERT_VECTOR_ELT [[COPY]], [[TRUNC]](s1), [[C]](s64)397 ; RV64-NEXT: $v0 = COPY [[IVEC]](<vscale x 4 x s1>)398 ; RV64-NEXT: PseudoRET implicit $v0399 %a = insertelement <vscale x 4 x i1> %v, i1 %x, i32 0400 ret <vscale x 4 x i1> %a401}402 403define <vscale x 1 x i8> @insertelement_nxv1i8_0() {404 ; RV32-LABEL: name: insertelement_nxv1i8_0405 ; RV32: bb.1 (%ir-block.0):406 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF407 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0408 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0409 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)410 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s8>)411 ; RV32-NEXT: PseudoRET implicit $v8412 ;413 ; RV64-LABEL: name: insertelement_nxv1i8_0414 ; RV64: bb.1 (%ir-block.0):415 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF416 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0417 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0418 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)419 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s8>)420 ; RV64-NEXT: PseudoRET implicit $v8421 %a = insertelement <vscale x 1 x i8> poison, i8 0, i32 0422 ret <vscale x 1 x i8> %a423}424 425define <vscale x 1 x i8> @insertelement_nxv1i8_1() {426 ; RV32-LABEL: name: insertelement_nxv1i8_1427 ; RV32: bb.1 (%ir-block.0):428 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF429 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1430 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0431 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)432 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s8>)433 ; RV32-NEXT: PseudoRET implicit $v8434 ;435 ; RV64-LABEL: name: insertelement_nxv1i8_1436 ; RV64: bb.1 (%ir-block.0):437 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF438 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1439 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0440 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)441 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s8>)442 ; RV64-NEXT: PseudoRET implicit $v8443 %a = insertelement <vscale x 1 x i8> poison, i8 -1, i32 0444 ret <vscale x 1 x i8> %a445}446 447define <vscale x 1 x i8> @insertelement_nxv1i8_2(i8 %x) {448 ; RV32-LABEL: name: insertelement_nxv1i8_2449 ; RV32: bb.1 (%ir-block.0):450 ; RV32-NEXT: liveins: $x10451 ; RV32-NEXT: {{ $}}452 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10453 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)454 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF455 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0456 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s32)457 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s8>)458 ; RV32-NEXT: PseudoRET implicit $v8459 ;460 ; RV64-LABEL: name: insertelement_nxv1i8_2461 ; RV64: bb.1 (%ir-block.0):462 ; RV64-NEXT: liveins: $x10463 ; RV64-NEXT: {{ $}}464 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10465 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)466 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF467 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0468 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s64)469 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s8>)470 ; RV64-NEXT: PseudoRET implicit $v8471 %a = insertelement <vscale x 1 x i8> poison, i8 %x, i32 0472 ret <vscale x 1 x i8> %a473}474 475define <vscale x 2 x i8> @insertelement_nxv2i8_0() {476 ; RV32-LABEL: name: insertelement_nxv2i8_0477 ; RV32: bb.1 (%ir-block.0):478 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF479 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0480 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0481 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)482 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s8>)483 ; RV32-NEXT: PseudoRET implicit $v8484 ;485 ; RV64-LABEL: name: insertelement_nxv2i8_0486 ; RV64: bb.1 (%ir-block.0):487 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF488 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0489 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0490 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)491 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s8>)492 ; RV64-NEXT: PseudoRET implicit $v8493 %a = insertelement <vscale x 2 x i8> poison, i8 0, i32 0494 ret <vscale x 2 x i8> %a495}496 497define <vscale x 2 x i8> @insertelement_nxv2i8_1() {498 ; RV32-LABEL: name: insertelement_nxv2i8_1499 ; RV32: bb.1 (%ir-block.0):500 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF501 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1502 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0503 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)504 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s8>)505 ; RV32-NEXT: PseudoRET implicit $v8506 ;507 ; RV64-LABEL: name: insertelement_nxv2i8_1508 ; RV64: bb.1 (%ir-block.0):509 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF510 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1511 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0512 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)513 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s8>)514 ; RV64-NEXT: PseudoRET implicit $v8515 %a = insertelement <vscale x 2 x i8> poison, i8 -1, i32 0516 ret <vscale x 2 x i8> %a517}518 519define <vscale x 2 x i8> @insertelement_nxv2i8_2(i8 %x) {520 ; RV32-LABEL: name: insertelement_nxv2i8_2521 ; RV32: bb.1 (%ir-block.0):522 ; RV32-NEXT: liveins: $x10523 ; RV32-NEXT: {{ $}}524 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10525 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)526 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF527 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0528 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s32)529 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s8>)530 ; RV32-NEXT: PseudoRET implicit $v8531 ;532 ; RV64-LABEL: name: insertelement_nxv2i8_2533 ; RV64: bb.1 (%ir-block.0):534 ; RV64-NEXT: liveins: $x10535 ; RV64-NEXT: {{ $}}536 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10537 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)538 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF539 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0540 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s64)541 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s8>)542 ; RV64-NEXT: PseudoRET implicit $v8543 %a = insertelement <vscale x 2 x i8> poison, i8 %x, i32 0544 ret <vscale x 2 x i8> %a545}546 547define <vscale x 4 x i8> @insertelement_nxv4i8_0() {548 ; RV32-LABEL: name: insertelement_nxv4i8_0549 ; RV32: bb.1 (%ir-block.0):550 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF551 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0552 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0553 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)554 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)555 ; RV32-NEXT: PseudoRET implicit $v8556 ;557 ; RV64-LABEL: name: insertelement_nxv4i8_0558 ; RV64: bb.1 (%ir-block.0):559 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF560 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0561 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0562 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)563 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)564 ; RV64-NEXT: PseudoRET implicit $v8565 %a = insertelement <vscale x 4 x i8> poison, i8 0, i32 0566 ret <vscale x 4 x i8> %a567}568 569define <vscale x 4 x i8> @insertelement_nxv4i8_1() {570 ; RV32-LABEL: name: insertelement_nxv4i8_1571 ; RV32: bb.1 (%ir-block.0):572 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF573 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1574 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0575 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)576 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)577 ; RV32-NEXT: PseudoRET implicit $v8578 ;579 ; RV64-LABEL: name: insertelement_nxv4i8_1580 ; RV64: bb.1 (%ir-block.0):581 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF582 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1583 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0584 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)585 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)586 ; RV64-NEXT: PseudoRET implicit $v8587 %a = insertelement <vscale x 4 x i8> poison, i8 -1, i32 0588 ret <vscale x 4 x i8> %a589}590 591define <vscale x 4 x i8> @insertelement_nxv4i8_2(i8 %x) {592 ; RV32-LABEL: name: insertelement_nxv4i8_2593 ; RV32: bb.1 (%ir-block.0):594 ; RV32-NEXT: liveins: $x10595 ; RV32-NEXT: {{ $}}596 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10597 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)598 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF599 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0600 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s32)601 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)602 ; RV32-NEXT: PseudoRET implicit $v8603 ;604 ; RV64-LABEL: name: insertelement_nxv4i8_2605 ; RV64: bb.1 (%ir-block.0):606 ; RV64-NEXT: liveins: $x10607 ; RV64-NEXT: {{ $}}608 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10609 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)610 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF611 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0612 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s64)613 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)614 ; RV64-NEXT: PseudoRET implicit $v8615 %a = insertelement <vscale x 4 x i8> poison, i8 %x, i32 0616 ret <vscale x 4 x i8> %a617}618 619define <vscale x 8 x i8> @insertelement_nxv8i8_0() {620 ; RV32-LABEL: name: insertelement_nxv8i8_0621 ; RV32: bb.1 (%ir-block.0):622 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF623 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0624 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0625 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)626 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 8 x s8>)627 ; RV32-NEXT: PseudoRET implicit $v8628 ;629 ; RV64-LABEL: name: insertelement_nxv8i8_0630 ; RV64: bb.1 (%ir-block.0):631 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF632 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0633 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0634 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)635 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 8 x s8>)636 ; RV64-NEXT: PseudoRET implicit $v8637 %a = insertelement <vscale x 8 x i8> poison, i8 0, i32 0638 ret <vscale x 8 x i8> %a639}640 641define <vscale x 8 x i8> @insertelement_nxv8i8_1() {642 ; RV32-LABEL: name: insertelement_nxv8i8_1643 ; RV32: bb.1 (%ir-block.0):644 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF645 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1646 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0647 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)648 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 8 x s8>)649 ; RV32-NEXT: PseudoRET implicit $v8650 ;651 ; RV64-LABEL: name: insertelement_nxv8i8_1652 ; RV64: bb.1 (%ir-block.0):653 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF654 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1655 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0656 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)657 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 8 x s8>)658 ; RV64-NEXT: PseudoRET implicit $v8659 %a = insertelement <vscale x 8 x i8> poison, i8 -1, i32 0660 ret <vscale x 8 x i8> %a661}662 663define <vscale x 8 x i8> @insertelement_nxv8i8_2(i8 %x) {664 ; RV32-LABEL: name: insertelement_nxv8i8_2665 ; RV32: bb.1 (%ir-block.0):666 ; RV32-NEXT: liveins: $x10667 ; RV32-NEXT: {{ $}}668 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10669 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)670 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF671 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0672 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s32)673 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 8 x s8>)674 ; RV32-NEXT: PseudoRET implicit $v8675 ;676 ; RV64-LABEL: name: insertelement_nxv8i8_2677 ; RV64: bb.1 (%ir-block.0):678 ; RV64-NEXT: liveins: $x10679 ; RV64-NEXT: {{ $}}680 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10681 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)682 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF683 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0684 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[C]](s64)685 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 8 x s8>)686 ; RV64-NEXT: PseudoRET implicit $v8687 %a = insertelement <vscale x 8 x i8> poison, i8 %x, i32 0688 ret <vscale x 8 x i8> %a689}690 691define <vscale x 16 x i8> @insertelement_nxv16i8_0() {692 ; RV32-LABEL: name: insertelement_nxv16i8_0693 ; RV32: bb.1 (%ir-block.0):694 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF695 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0696 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0697 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)698 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 16 x s8>)699 ; RV32-NEXT: PseudoRET implicit $v8m2700 ;701 ; RV64-LABEL: name: insertelement_nxv16i8_0702 ; RV64: bb.1 (%ir-block.0):703 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF704 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0705 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0706 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)707 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 16 x s8>)708 ; RV64-NEXT: PseudoRET implicit $v8m2709 %a = insertelement <vscale x 16 x i8> poison, i8 0, i64 0710 ret <vscale x 16 x i8> %a711}712 713define <vscale x 16 x i8> @insertelement_nxv16i8_1() {714 ; RV32-LABEL: name: insertelement_nxv16i8_1715 ; RV32: bb.1 (%ir-block.0):716 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF717 ; RV32-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1718 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0719 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s32)720 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 16 x s8>)721 ; RV32-NEXT: PseudoRET implicit $v8m2722 ;723 ; RV64-LABEL: name: insertelement_nxv16i8_1724 ; RV64: bb.1 (%ir-block.0):725 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF726 ; RV64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1727 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0728 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s8), [[C1]](s64)729 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 16 x s8>)730 ; RV64-NEXT: PseudoRET implicit $v8m2731 %a = insertelement <vscale x 16 x i8> poison, i8 -1, i32 0732 ret <vscale x 16 x i8> %a733}734 735define <vscale x 16 x i8> @insertelement_nxv16i8_2(i8 %x, i64 %idx) {736 ; RV32-LABEL: name: insertelement_nxv16i8_2737 ; RV32: bb.1 (%ir-block.0):738 ; RV32-NEXT: liveins: $x10, $x11, $x12739 ; RV32-NEXT: {{ $}}740 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10741 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)742 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11743 ; RV32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12744 ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)745 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF746 ; RV32-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[MV]](s64)747 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[TRUNC1]](s32)748 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 16 x s8>)749 ; RV32-NEXT: PseudoRET implicit $v8m2750 ;751 ; RV64-LABEL: name: insertelement_nxv16i8_2752 ; RV64: bb.1 (%ir-block.0):753 ; RV64-NEXT: liveins: $x10, $x11754 ; RV64-NEXT: {{ $}}755 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10756 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)757 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11758 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF759 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s8>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s8), [[COPY1]](s64)760 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 16 x s8>)761 ; RV64-NEXT: PseudoRET implicit $v8m2762 %a = insertelement <vscale x 16 x i8> poison, i8 %x, i64 %idx763 ret <vscale x 16 x i8> %a764}765 766define <vscale x 4 x i8> @insertelement_nxv4i8_3(<vscale x 4 x i8> %v, i8 %x) {767 ; RV32-LABEL: name: insertelement_nxv4i8_3768 ; RV32: bb.1 (%ir-block.0):769 ; RV32-NEXT: liveins: $v8, $x10770 ; RV32-NEXT: {{ $}}771 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8772 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x10773 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)774 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0775 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[COPY]], [[TRUNC]](s8), [[C]](s32)776 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)777 ; RV32-NEXT: PseudoRET implicit $v8778 ;779 ; RV64-LABEL: name: insertelement_nxv4i8_3780 ; RV64: bb.1 (%ir-block.0):781 ; RV64-NEXT: liveins: $v8, $x10782 ; RV64-NEXT: {{ $}}783 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8784 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x10785 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s64)786 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0787 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s8>) = G_INSERT_VECTOR_ELT [[COPY]], [[TRUNC]](s8), [[C]](s64)788 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s8>)789 ; RV64-NEXT: PseudoRET implicit $v8790 %a = insertelement <vscale x 4 x i8> %v, i8 %x, i32 0791 ret <vscale x 4 x i8> %a792}793 794define <vscale x 1 x i16> @insertelement_nxv1i16_0() {795 ; RV32-LABEL: name: insertelement_nxv1i16_0796 ; RV32: bb.1 (%ir-block.0):797 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF798 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0799 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0800 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)801 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s16>)802 ; RV32-NEXT: PseudoRET implicit $v8803 ;804 ; RV64-LABEL: name: insertelement_nxv1i16_0805 ; RV64: bb.1 (%ir-block.0):806 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF807 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0808 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0809 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)810 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s16>)811 ; RV64-NEXT: PseudoRET implicit $v8812 %a = insertelement <vscale x 1 x i16> poison, i16 0, i32 0813 ret <vscale x 1 x i16> %a814}815 816define <vscale x 1 x i16> @insertelement_nxv1i16_1() {817 ; RV32-LABEL: name: insertelement_nxv1i16_1818 ; RV32: bb.1 (%ir-block.0):819 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF820 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -1821 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0822 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)823 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s16>)824 ; RV32-NEXT: PseudoRET implicit $v8825 ;826 ; RV64-LABEL: name: insertelement_nxv1i16_1827 ; RV64: bb.1 (%ir-block.0):828 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF829 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -1830 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0831 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)832 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s16>)833 ; RV64-NEXT: PseudoRET implicit $v8834 %a = insertelement <vscale x 1 x i16> poison, i16 -1, i32 0835 ret <vscale x 1 x i16> %a836}837 838define <vscale x 1 x i16> @insertelement_nxv1i16_2(i16 %x) {839 ; RV32-LABEL: name: insertelement_nxv1i16_2840 ; RV32: bb.1 (%ir-block.0):841 ; RV32-NEXT: liveins: $x10842 ; RV32-NEXT: {{ $}}843 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10844 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)845 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF846 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0847 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s32)848 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s16>)849 ; RV32-NEXT: PseudoRET implicit $v8850 ;851 ; RV64-LABEL: name: insertelement_nxv1i16_2852 ; RV64: bb.1 (%ir-block.0):853 ; RV64-NEXT: liveins: $x10854 ; RV64-NEXT: {{ $}}855 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10856 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)857 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF858 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0859 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s64)860 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s16>)861 ; RV64-NEXT: PseudoRET implicit $v8862 %a = insertelement <vscale x 1 x i16> poison, i16 %x, i32 0863 ret <vscale x 1 x i16> %a864}865 866define <vscale x 2 x i16> @insertelement_nxv2i16_0() {867 ; RV32-LABEL: name: insertelement_nxv2i16_0868 ; RV32: bb.1 (%ir-block.0):869 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF870 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0871 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1872 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)873 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s16>)874 ; RV32-NEXT: PseudoRET implicit $v8875 ;876 ; RV64-LABEL: name: insertelement_nxv2i16_0877 ; RV64: bb.1 (%ir-block.0):878 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF879 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0880 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1881 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)882 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s16>)883 ; RV64-NEXT: PseudoRET implicit $v8884 %a = insertelement <vscale x 2 x i16> poison, i16 0, i64 1885 ret <vscale x 2 x i16> %a886}887 888define <vscale x 2 x i16> @insertelement_nxv2i16_1() {889 ; RV32-LABEL: name: insertelement_nxv2i16_1890 ; RV32: bb.1 (%ir-block.0):891 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF892 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -1893 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0894 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)895 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s16>)896 ; RV32-NEXT: PseudoRET implicit $v8897 ;898 ; RV64-LABEL: name: insertelement_nxv2i16_1899 ; RV64: bb.1 (%ir-block.0):900 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF901 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -1902 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0903 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)904 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s16>)905 ; RV64-NEXT: PseudoRET implicit $v8906 %a = insertelement <vscale x 2 x i16> poison, i16 -1, i32 0907 ret <vscale x 2 x i16> %a908}909 910define <vscale x 2 x i16> @insertelement_nxv2i16_2(i16 %x) {911 ; RV32-LABEL: name: insertelement_nxv2i16_2912 ; RV32: bb.1 (%ir-block.0):913 ; RV32-NEXT: liveins: $x10914 ; RV32-NEXT: {{ $}}915 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10916 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)917 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF918 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0919 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s32)920 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s16>)921 ; RV32-NEXT: PseudoRET implicit $v8922 ;923 ; RV64-LABEL: name: insertelement_nxv2i16_2924 ; RV64: bb.1 (%ir-block.0):925 ; RV64-NEXT: liveins: $x10926 ; RV64-NEXT: {{ $}}927 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10928 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)929 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF930 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0931 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s64)932 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s16>)933 ; RV64-NEXT: PseudoRET implicit $v8934 %a = insertelement <vscale x 2 x i16> poison, i16 %x, i32 0935 ret <vscale x 2 x i16> %a936}937 938define <vscale x 4 x i16> @insertelement_nxv4i16_0() {939 ; RV32-LABEL: name: insertelement_nxv4i16_0940 ; RV32: bb.1 (%ir-block.0):941 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF942 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0943 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0944 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)945 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)946 ; RV32-NEXT: PseudoRET implicit $v8947 ;948 ; RV64-LABEL: name: insertelement_nxv4i16_0949 ; RV64: bb.1 (%ir-block.0):950 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF951 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0952 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0953 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)954 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)955 ; RV64-NEXT: PseudoRET implicit $v8956 %a = insertelement <vscale x 4 x i16> poison, i16 0, i32 0957 ret <vscale x 4 x i16> %a958}959 960define <vscale x 4 x i16> @insertelement_nxv4i16_1() {961 ; RV32-LABEL: name: insertelement_nxv4i16_1962 ; RV32: bb.1 (%ir-block.0):963 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF964 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -1965 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0966 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)967 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)968 ; RV32-NEXT: PseudoRET implicit $v8969 ;970 ; RV64-LABEL: name: insertelement_nxv4i16_1971 ; RV64: bb.1 (%ir-block.0):972 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF973 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -1974 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0975 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)976 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)977 ; RV64-NEXT: PseudoRET implicit $v8978 %a = insertelement <vscale x 4 x i16> poison, i16 -1, i32 0979 ret <vscale x 4 x i16> %a980}981 982define <vscale x 4 x i16> @insertelement_nxv4i16_2(i16 %x) {983 ; RV32-LABEL: name: insertelement_nxv4i16_2984 ; RV32: bb.1 (%ir-block.0):985 ; RV32-NEXT: liveins: $x10986 ; RV32-NEXT: {{ $}}987 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10988 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)989 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF990 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0991 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s32)992 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)993 ; RV32-NEXT: PseudoRET implicit $v8994 ;995 ; RV64-LABEL: name: insertelement_nxv4i16_2996 ; RV64: bb.1 (%ir-block.0):997 ; RV64-NEXT: liveins: $x10998 ; RV64-NEXT: {{ $}}999 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101000 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)1001 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF1002 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01003 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s64)1004 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)1005 ; RV64-NEXT: PseudoRET implicit $v81006 %a = insertelement <vscale x 4 x i16> poison, i16 %x, i32 01007 ret <vscale x 4 x i16> %a1008}1009 1010define <vscale x 8 x i16> @insertelement_nxv8i16_0() {1011 ; RV32-LABEL: name: insertelement_nxv8i16_01012 ; RV32: bb.1 (%ir-block.0):1013 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF1014 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 01015 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01016 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)1017 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 8 x s16>)1018 ; RV32-NEXT: PseudoRET implicit $v8m21019 ;1020 ; RV64-LABEL: name: insertelement_nxv8i16_01021 ; RV64: bb.1 (%ir-block.0):1022 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF1023 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 01024 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01025 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)1026 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 8 x s16>)1027 ; RV64-NEXT: PseudoRET implicit $v8m21028 %a = insertelement <vscale x 8 x i16> poison, i16 0, i32 01029 ret <vscale x 8 x i16> %a1030}1031 1032define <vscale x 8 x i16> @insertelement_nxv8i16_1() {1033 ; RV32-LABEL: name: insertelement_nxv8i16_11034 ; RV32: bb.1 (%ir-block.0):1035 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF1036 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -11037 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01038 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)1039 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 8 x s16>)1040 ; RV32-NEXT: PseudoRET implicit $v8m21041 ;1042 ; RV64-LABEL: name: insertelement_nxv8i16_11043 ; RV64: bb.1 (%ir-block.0):1044 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF1045 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -11046 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01047 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)1048 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 8 x s16>)1049 ; RV64-NEXT: PseudoRET implicit $v8m21050 %a = insertelement <vscale x 8 x i16> poison, i16 -1, i32 01051 ret <vscale x 8 x i16> %a1052}1053 1054define <vscale x 8 x i16> @insertelement_nxv8i16_2(i16 %x) {1055 ; RV32-LABEL: name: insertelement_nxv8i16_21056 ; RV32: bb.1 (%ir-block.0):1057 ; RV32-NEXT: liveins: $x101058 ; RV32-NEXT: {{ $}}1059 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101060 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)1061 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF1062 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01063 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s32)1064 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 8 x s16>)1065 ; RV32-NEXT: PseudoRET implicit $v8m21066 ;1067 ; RV64-LABEL: name: insertelement_nxv8i16_21068 ; RV64: bb.1 (%ir-block.0):1069 ; RV64-NEXT: liveins: $x101070 ; RV64-NEXT: {{ $}}1071 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101072 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)1073 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF1074 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01075 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s64)1076 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 8 x s16>)1077 ; RV64-NEXT: PseudoRET implicit $v8m21078 %a = insertelement <vscale x 8 x i16> poison, i16 %x, i32 01079 ret <vscale x 8 x i16> %a1080}1081 1082define <vscale x 16 x i16> @insertelement_nxv16i16_0() {1083 ; RV32-LABEL: name: insertelement_nxv16i16_01084 ; RV32: bb.1 (%ir-block.0):1085 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF1086 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 01087 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01088 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)1089 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 16 x s16>)1090 ; RV32-NEXT: PseudoRET implicit $v8m41091 ;1092 ; RV64-LABEL: name: insertelement_nxv16i16_01093 ; RV64: bb.1 (%ir-block.0):1094 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF1095 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 01096 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01097 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)1098 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 16 x s16>)1099 ; RV64-NEXT: PseudoRET implicit $v8m41100 %a = insertelement <vscale x 16 x i16> poison, i16 0, i32 01101 ret <vscale x 16 x i16> %a1102}1103 1104define <vscale x 16 x i16> @insertelement_nxv16i16_1() {1105 ; RV32-LABEL: name: insertelement_nxv16i16_11106 ; RV32: bb.1 (%ir-block.0):1107 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF1108 ; RV32-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -11109 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01110 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s32)1111 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 16 x s16>)1112 ; RV32-NEXT: PseudoRET implicit $v8m41113 ;1114 ; RV64-LABEL: name: insertelement_nxv16i16_11115 ; RV64: bb.1 (%ir-block.0):1116 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF1117 ; RV64-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -11118 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01119 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s16), [[C1]](s64)1120 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 16 x s16>)1121 ; RV64-NEXT: PseudoRET implicit $v8m41122 %a = insertelement <vscale x 16 x i16> poison, i16 -1, i32 01123 ret <vscale x 16 x i16> %a1124}1125 1126define <vscale x 16 x i16> @insertelement_nxv16i16_2(i16 %x) {1127 ; RV32-LABEL: name: insertelement_nxv16i16_21128 ; RV32: bb.1 (%ir-block.0):1129 ; RV32-NEXT: liveins: $x101130 ; RV32-NEXT: {{ $}}1131 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101132 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)1133 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF1134 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01135 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s32)1136 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 16 x s16>)1137 ; RV32-NEXT: PseudoRET implicit $v8m41138 ;1139 ; RV64-LABEL: name: insertelement_nxv16i16_21140 ; RV64: bb.1 (%ir-block.0):1141 ; RV64-NEXT: liveins: $x101142 ; RV64-NEXT: {{ $}}1143 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101144 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)1145 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF1146 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01147 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C]](s64)1148 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 16 x s16>)1149 ; RV64-NEXT: PseudoRET implicit $v8m41150 %a = insertelement <vscale x 16 x i16> poison, i16 %x, i32 01151 ret <vscale x 16 x i16> %a1152}1153 1154define <vscale x 4 x i16> @insertelement_nxv4i16(<vscale x 4 x i16> %v, i16 %x) {1155 ; RV32-LABEL: name: insertelement_nxv4i161156 ; RV32: bb.1 (%ir-block.0):1157 ; RV32-NEXT: liveins: $v8, $x101158 ; RV32-NEXT: {{ $}}1159 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v81160 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x101161 ; RV32-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)1162 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01163 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[COPY]], [[TRUNC]](s16), [[C]](s32)1164 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)1165 ; RV32-NEXT: PseudoRET implicit $v81166 ;1167 ; RV64-LABEL: name: insertelement_nxv4i161168 ; RV64: bb.1 (%ir-block.0):1169 ; RV64-NEXT: liveins: $v8, $x101170 ; RV64-NEXT: {{ $}}1171 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v81172 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x101173 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64)1174 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01175 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s16>) = G_INSERT_VECTOR_ELT [[COPY]], [[TRUNC]](s16), [[C]](s64)1176 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 4 x s16>)1177 ; RV64-NEXT: PseudoRET implicit $v81178 %a = insertelement <vscale x 4 x i16> %v, i16 %x, i32 01179 ret <vscale x 4 x i16> %a1180}1181 1182define <vscale x 1 x i32> @insertelement_nxv1i32_0() {1183 ; RV32-LABEL: name: insertelement_nxv1i32_01184 ; RV32: bb.1 (%ir-block.0):1185 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF1186 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01187 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C]](s32)1188 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s32>)1189 ; RV32-NEXT: PseudoRET implicit $v81190 ;1191 ; RV64-LABEL: name: insertelement_nxv1i32_01192 ; RV64: bb.1 (%ir-block.0):1193 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF1194 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01195 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01196 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1197 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s32>)1198 ; RV64-NEXT: PseudoRET implicit $v81199 %a = insertelement <vscale x 1 x i32> poison, i32 0, i32 01200 ret <vscale x 1 x i32> %a1201}1202 1203define <vscale x 1 x i32> @insertelement_nxv1i32_1() {1204 ; RV32-LABEL: name: insertelement_nxv1i32_11205 ; RV32: bb.1 (%ir-block.0):1206 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF1207 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11208 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01209 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s32)1210 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s32>)1211 ; RV32-NEXT: PseudoRET implicit $v81212 ;1213 ; RV64-LABEL: name: insertelement_nxv1i32_11214 ; RV64: bb.1 (%ir-block.0):1215 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF1216 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11217 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01218 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1219 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s32>)1220 ; RV64-NEXT: PseudoRET implicit $v81221 %a = insertelement <vscale x 1 x i32> poison, i32 -1, i32 01222 ret <vscale x 1 x i32> %a1223}1224 1225define <vscale x 1 x i32> @insertelement_nxv1i32_2(i32 %x) {1226 ; RV32-LABEL: name: insertelement_nxv1i32_21227 ; RV32: bb.1 (%ir-block.0):1228 ; RV32-NEXT: liveins: $x101229 ; RV32-NEXT: {{ $}}1230 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101231 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF1232 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01233 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s32), [[C]](s32)1234 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s32>)1235 ; RV32-NEXT: PseudoRET implicit $v81236 ;1237 ; RV64-LABEL: name: insertelement_nxv1i32_21238 ; RV64: bb.1 (%ir-block.0):1239 ; RV64-NEXT: liveins: $x101240 ; RV64-NEXT: {{ $}}1241 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101242 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)1243 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF1244 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01245 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s32), [[C]](s64)1246 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s32>)1247 ; RV64-NEXT: PseudoRET implicit $v81248 %a = insertelement <vscale x 1 x i32> poison, i32 %x, i32 01249 ret <vscale x 1 x i32> %a1250}1251 1252define <vscale x 2 x i32> @insertelement_nxv2i32_0() {1253 ; RV32-LABEL: name: insertelement_nxv2i32_01254 ; RV32: bb.1 (%ir-block.0):1255 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF1256 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01257 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C]](s32)1258 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s32>)1259 ; RV32-NEXT: PseudoRET implicit $v81260 ;1261 ; RV64-LABEL: name: insertelement_nxv2i32_01262 ; RV64: bb.1 (%ir-block.0):1263 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF1264 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01265 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01266 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1267 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s32>)1268 ; RV64-NEXT: PseudoRET implicit $v81269 %a = insertelement <vscale x 2 x i32> poison, i32 0, i32 01270 ret <vscale x 2 x i32> %a1271}1272 1273define <vscale x 2 x i32> @insertelement_nxv2i32_1() {1274 ; RV32-LABEL: name: insertelement_nxv2i32_11275 ; RV32: bb.1 (%ir-block.0):1276 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF1277 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11278 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01279 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s32)1280 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s32>)1281 ; RV32-NEXT: PseudoRET implicit $v81282 ;1283 ; RV64-LABEL: name: insertelement_nxv2i32_11284 ; RV64: bb.1 (%ir-block.0):1285 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF1286 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11287 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01288 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1289 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s32>)1290 ; RV64-NEXT: PseudoRET implicit $v81291 %a = insertelement <vscale x 2 x i32> poison, i32 -1, i32 01292 ret <vscale x 2 x i32> %a1293}1294 1295define <vscale x 2 x i32> @insertelement_nxv2i32_2(i32 %x) {1296 ; RV32-LABEL: name: insertelement_nxv2i32_21297 ; RV32: bb.1 (%ir-block.0):1298 ; RV32-NEXT: liveins: $x101299 ; RV32-NEXT: {{ $}}1300 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101301 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF1302 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01303 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s32), [[C]](s32)1304 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s32>)1305 ; RV32-NEXT: PseudoRET implicit $v81306 ;1307 ; RV64-LABEL: name: insertelement_nxv2i32_21308 ; RV64: bb.1 (%ir-block.0):1309 ; RV64-NEXT: liveins: $x101310 ; RV64-NEXT: {{ $}}1311 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101312 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)1313 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF1314 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01315 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s32), [[C]](s64)1316 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 2 x s32>)1317 ; RV64-NEXT: PseudoRET implicit $v81318 %a = insertelement <vscale x 2 x i32> poison, i32 %x, i32 01319 ret <vscale x 2 x i32> %a1320}1321 1322define <vscale x 4 x i32> @insertelement_nxv4i32_0() {1323 ; RV32-LABEL: name: insertelement_nxv4i32_01324 ; RV32: bb.1 (%ir-block.0):1325 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF1326 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01327 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C]](s32)1328 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1329 ; RV32-NEXT: PseudoRET implicit $v8m21330 ;1331 ; RV64-LABEL: name: insertelement_nxv4i32_01332 ; RV64: bb.1 (%ir-block.0):1333 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF1334 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01335 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01336 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1337 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1338 ; RV64-NEXT: PseudoRET implicit $v8m21339 %a = insertelement <vscale x 4 x i32> poison, i32 0, i32 01340 ret <vscale x 4 x i32> %a1341}1342 1343define <vscale x 4 x i32> @insertelement_nxv4i32_1() {1344 ; RV32-LABEL: name: insertelement_nxv4i32_11345 ; RV32: bb.1 (%ir-block.0):1346 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF1347 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11348 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01349 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s32)1350 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1351 ; RV32-NEXT: PseudoRET implicit $v8m21352 ;1353 ; RV64-LABEL: name: insertelement_nxv4i32_11354 ; RV64: bb.1 (%ir-block.0):1355 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF1356 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11357 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01358 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1359 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1360 ; RV64-NEXT: PseudoRET implicit $v8m21361 %a = insertelement <vscale x 4 x i32> poison, i32 -1, i32 01362 ret <vscale x 4 x i32> %a1363}1364 1365define <vscale x 4 x i32> @insertelement_nxv4i32_2(i32 %x) {1366 ; RV32-LABEL: name: insertelement_nxv4i32_21367 ; RV32: bb.1 (%ir-block.0):1368 ; RV32-NEXT: liveins: $x101369 ; RV32-NEXT: {{ $}}1370 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101371 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF1372 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01373 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s32), [[C]](s32)1374 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1375 ; RV32-NEXT: PseudoRET implicit $v8m21376 ;1377 ; RV64-LABEL: name: insertelement_nxv4i32_21378 ; RV64: bb.1 (%ir-block.0):1379 ; RV64-NEXT: liveins: $x101380 ; RV64-NEXT: {{ $}}1381 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101382 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)1383 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF1384 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01385 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s32), [[C]](s64)1386 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1387 ; RV64-NEXT: PseudoRET implicit $v8m21388 %a = insertelement <vscale x 4 x i32> poison, i32 %x, i32 01389 ret <vscale x 4 x i32> %a1390}1391 1392define <vscale x 8 x i32> @insertelement_nxv8i32_0() {1393 ; RV32-LABEL: name: insertelement_nxv8i32_01394 ; RV32: bb.1 (%ir-block.0):1395 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF1396 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01397 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C]](s32)1398 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 8 x s32>)1399 ; RV32-NEXT: PseudoRET implicit $v8m41400 ;1401 ; RV64-LABEL: name: insertelement_nxv8i32_01402 ; RV64: bb.1 (%ir-block.0):1403 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF1404 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01405 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01406 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1407 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 8 x s32>)1408 ; RV64-NEXT: PseudoRET implicit $v8m41409 %a = insertelement <vscale x 8 x i32> poison, i32 0, i32 01410 ret <vscale x 8 x i32> %a1411}1412 1413define <vscale x 8 x i32> @insertelement_nxv8i32_1() {1414 ; RV32-LABEL: name: insertelement_nxv8i32_11415 ; RV32: bb.1 (%ir-block.0):1416 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF1417 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11418 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01419 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s32)1420 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 8 x s32>)1421 ; RV32-NEXT: PseudoRET implicit $v8m41422 ;1423 ; RV64-LABEL: name: insertelement_nxv8i32_11424 ; RV64: bb.1 (%ir-block.0):1425 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF1426 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11427 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01428 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1429 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 8 x s32>)1430 ; RV64-NEXT: PseudoRET implicit $v8m41431 %a = insertelement <vscale x 8 x i32> poison, i32 -1, i32 01432 ret <vscale x 8 x i32> %a1433}1434 1435define <vscale x 8 x i32> @insertelement_nxv8i32_2(i32 %x) {1436 ; RV32-LABEL: name: insertelement_nxv8i32_21437 ; RV32: bb.1 (%ir-block.0):1438 ; RV32-NEXT: liveins: $x101439 ; RV32-NEXT: {{ $}}1440 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101441 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF1442 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01443 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s32), [[C]](s32)1444 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 8 x s32>)1445 ; RV32-NEXT: PseudoRET implicit $v8m41446 ;1447 ; RV64-LABEL: name: insertelement_nxv8i32_21448 ; RV64: bb.1 (%ir-block.0):1449 ; RV64-NEXT: liveins: $x101450 ; RV64-NEXT: {{ $}}1451 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101452 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)1453 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF1454 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01455 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s32), [[C]](s64)1456 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 8 x s32>)1457 ; RV64-NEXT: PseudoRET implicit $v8m41458 %a = insertelement <vscale x 8 x i32> poison, i32 %x, i32 01459 ret <vscale x 8 x i32> %a1460}1461 1462define <vscale x 16 x i32> @insertelement_nxv16i32_0() {1463 ; RV32-LABEL: name: insertelement_nxv16i32_01464 ; RV32: bb.1 (%ir-block.0):1465 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF1466 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01467 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C]](s32)1468 ; RV32-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 16 x s32>)1469 ; RV32-NEXT: PseudoRET implicit $v8m81470 ;1471 ; RV64-LABEL: name: insertelement_nxv16i32_01472 ; RV64: bb.1 (%ir-block.0):1473 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF1474 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01475 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01476 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1477 ; RV64-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 16 x s32>)1478 ; RV64-NEXT: PseudoRET implicit $v8m81479 %a = insertelement <vscale x 16 x i32> poison, i32 0, i32 01480 ret <vscale x 16 x i32> %a1481}1482 1483define <vscale x 16 x i32> @insertelement_nxv16i32_1() {1484 ; RV32-LABEL: name: insertelement_nxv16i32_11485 ; RV32: bb.1 (%ir-block.0):1486 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF1487 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11488 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01489 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s32)1490 ; RV32-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 16 x s32>)1491 ; RV32-NEXT: PseudoRET implicit $v8m81492 ;1493 ; RV64-LABEL: name: insertelement_nxv16i32_11494 ; RV64: bb.1 (%ir-block.0):1495 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF1496 ; RV64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -11497 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01498 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s32), [[C1]](s64)1499 ; RV64-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 16 x s32>)1500 ; RV64-NEXT: PseudoRET implicit $v8m81501 %a = insertelement <vscale x 16 x i32> poison, i32 -1, i32 01502 ret <vscale x 16 x i32> %a1503}1504 1505define <vscale x 16 x i32> @insertelement_nxv16i32_2(i32 %x) {1506 ; RV32-LABEL: name: insertelement_nxv16i32_21507 ; RV32: bb.1 (%ir-block.0):1508 ; RV32-NEXT: liveins: $x101509 ; RV32-NEXT: {{ $}}1510 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101511 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF1512 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01513 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s32), [[C]](s32)1514 ; RV32-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 16 x s32>)1515 ; RV32-NEXT: PseudoRET implicit $v8m81516 ;1517 ; RV64-LABEL: name: insertelement_nxv16i32_21518 ; RV64: bb.1 (%ir-block.0):1519 ; RV64-NEXT: liveins: $x101520 ; RV64-NEXT: {{ $}}1521 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101522 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)1523 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF1524 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01525 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s32), [[C]](s64)1526 ; RV64-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 16 x s32>)1527 ; RV64-NEXT: PseudoRET implicit $v8m81528 %a = insertelement <vscale x 16 x i32> poison, i32 %x, i32 01529 ret <vscale x 16 x i32> %a1530}1531 1532define <vscale x 4 x i32> @insertelement_nxv4i32(<vscale x 4 x i32> %v, i32 %x) {1533 ; RV32-LABEL: name: insertelement_nxv4i321534 ; RV32: bb.1 (%ir-block.0):1535 ; RV32-NEXT: liveins: $x10, $v8m21536 ; RV32-NEXT: {{ $}}1537 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m21538 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x101539 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01540 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[COPY]], [[COPY1]](s32), [[C]](s32)1541 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1542 ; RV32-NEXT: PseudoRET implicit $v8m21543 ;1544 ; RV64-LABEL: name: insertelement_nxv4i321545 ; RV64: bb.1 (%ir-block.0):1546 ; RV64-NEXT: liveins: $x10, $v8m21547 ; RV64-NEXT: {{ $}}1548 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m21549 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x101550 ; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)1551 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01552 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s32>) = G_INSERT_VECTOR_ELT [[COPY]], [[TRUNC]](s32), [[C]](s64)1553 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 4 x s32>)1554 ; RV64-NEXT: PseudoRET implicit $v8m21555 %a = insertelement <vscale x 4 x i32> %v, i32 %x, i32 01556 ret <vscale x 4 x i32> %a1557}1558 1559define <vscale x 1 x i64> @insertelement_nxv1i64_0() {1560 ; RV32-LABEL: name: insertelement_nxv1i64_01561 ; RV32: bb.1 (%ir-block.0):1562 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF1563 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01564 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01565 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1566 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s64>)1567 ; RV32-NEXT: PseudoRET implicit $v81568 ;1569 ; RV64-LABEL: name: insertelement_nxv1i64_01570 ; RV64: bb.1 (%ir-block.0):1571 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF1572 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01573 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C]](s64)1574 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s64>)1575 ; RV64-NEXT: PseudoRET implicit $v81576 %a = insertelement <vscale x 1 x i64> poison, i64 0, i32 01577 ret <vscale x 1 x i64> %a1578}1579 1580define <vscale x 1 x i64> @insertelement_nxv1i64_1() {1581 ; RV32-LABEL: name: insertelement_nxv1i64_11582 ; RV32: bb.1 (%ir-block.0):1583 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF1584 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11585 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01586 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1587 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s64>)1588 ; RV32-NEXT: PseudoRET implicit $v81589 ;1590 ; RV64-LABEL: name: insertelement_nxv1i64_11591 ; RV64: bb.1 (%ir-block.0):1592 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF1593 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11594 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01595 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s64)1596 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s64>)1597 ; RV64-NEXT: PseudoRET implicit $v81598 %a = insertelement <vscale x 1 x i64> poison, i64 -1, i32 01599 ret <vscale x 1 x i64> %a1600}1601 1602define <vscale x 1 x i64> @insertelement_nxv1i64_2(i64 %x) {1603 ; RV32-LABEL: name: insertelement_nxv1i64_21604 ; RV32: bb.1 (%ir-block.0):1605 ; RV32-NEXT: liveins: $x10, $x111606 ; RV32-NEXT: {{ $}}1607 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101608 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x111609 ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1610 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF1611 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01612 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[MV]](s64), [[C]](s32)1613 ; RV32-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s64>)1614 ; RV32-NEXT: PseudoRET implicit $v81615 ;1616 ; RV64-LABEL: name: insertelement_nxv1i64_21617 ; RV64: bb.1 (%ir-block.0):1618 ; RV64-NEXT: liveins: $x101619 ; RV64-NEXT: {{ $}}1620 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101621 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF1622 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01623 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 1 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s64), [[C]](s64)1624 ; RV64-NEXT: $v8 = COPY [[IVEC]](<vscale x 1 x s64>)1625 ; RV64-NEXT: PseudoRET implicit $v81626 %a = insertelement <vscale x 1 x i64> poison, i64 %x, i32 01627 ret <vscale x 1 x i64> %a1628}1629 1630define <vscale x 2 x i64> @insertelement_nxv2i64_0() {1631 ; RV32-LABEL: name: insertelement_nxv2i64_01632 ; RV32: bb.1 (%ir-block.0):1633 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF1634 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01635 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01636 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1637 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 2 x s64>)1638 ; RV32-NEXT: PseudoRET implicit $v8m21639 ;1640 ; RV64-LABEL: name: insertelement_nxv2i64_01641 ; RV64: bb.1 (%ir-block.0):1642 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF1643 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01644 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C]](s64)1645 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 2 x s64>)1646 ; RV64-NEXT: PseudoRET implicit $v8m21647 %a = insertelement <vscale x 2 x i64> poison, i64 0, i32 01648 ret <vscale x 2 x i64> %a1649}1650 1651define <vscale x 2 x i64> @insertelement_nxv2i64_1() {1652 ; RV32-LABEL: name: insertelement_nxv2i64_11653 ; RV32: bb.1 (%ir-block.0):1654 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF1655 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11656 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01657 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1658 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 2 x s64>)1659 ; RV32-NEXT: PseudoRET implicit $v8m21660 ;1661 ; RV64-LABEL: name: insertelement_nxv2i64_11662 ; RV64: bb.1 (%ir-block.0):1663 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF1664 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11665 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01666 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s64)1667 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 2 x s64>)1668 ; RV64-NEXT: PseudoRET implicit $v8m21669 %a = insertelement <vscale x 2 x i64> poison, i64 -1, i32 01670 ret <vscale x 2 x i64> %a1671}1672 1673define <vscale x 2 x i64> @insertelement_nxv2i64_2(i64 %x) {1674 ; RV32-LABEL: name: insertelement_nxv2i64_21675 ; RV32: bb.1 (%ir-block.0):1676 ; RV32-NEXT: liveins: $x10, $x111677 ; RV32-NEXT: {{ $}}1678 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101679 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x111680 ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1681 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF1682 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01683 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[MV]](s64), [[C]](s32)1684 ; RV32-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 2 x s64>)1685 ; RV32-NEXT: PseudoRET implicit $v8m21686 ;1687 ; RV64-LABEL: name: insertelement_nxv2i64_21688 ; RV64: bb.1 (%ir-block.0):1689 ; RV64-NEXT: liveins: $x101690 ; RV64-NEXT: {{ $}}1691 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101692 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF1693 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01694 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 2 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s64), [[C]](s64)1695 ; RV64-NEXT: $v8m2 = COPY [[IVEC]](<vscale x 2 x s64>)1696 ; RV64-NEXT: PseudoRET implicit $v8m21697 %a = insertelement <vscale x 2 x i64> poison, i64 %x, i32 01698 ret <vscale x 2 x i64> %a1699}1700 1701define <vscale x 4 x i64> @insertelement_nxv4i64_0() {1702 ; RV32-LABEL: name: insertelement_nxv4i64_01703 ; RV32: bb.1 (%ir-block.0):1704 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF1705 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01706 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01707 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1708 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1709 ; RV32-NEXT: PseudoRET implicit $v8m41710 ;1711 ; RV64-LABEL: name: insertelement_nxv4i64_01712 ; RV64: bb.1 (%ir-block.0):1713 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF1714 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01715 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C]](s64)1716 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1717 ; RV64-NEXT: PseudoRET implicit $v8m41718 %a = insertelement <vscale x 4 x i64> poison, i64 0, i32 01719 ret <vscale x 4 x i64> %a1720}1721 1722define <vscale x 4 x i64> @insertelement_nxv4i64_1() {1723 ; RV32-LABEL: name: insertelement_nxv4i64_11724 ; RV32: bb.1 (%ir-block.0):1725 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF1726 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11727 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01728 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1729 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1730 ; RV32-NEXT: PseudoRET implicit $v8m41731 ;1732 ; RV64-LABEL: name: insertelement_nxv4i64_11733 ; RV64: bb.1 (%ir-block.0):1734 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF1735 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11736 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01737 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s64)1738 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1739 ; RV64-NEXT: PseudoRET implicit $v8m41740 %a = insertelement <vscale x 4 x i64> poison, i64 -1, i32 01741 ret <vscale x 4 x i64> %a1742}1743 1744define <vscale x 4 x i64> @insertelement_nxv4i64_2(i64 %x) {1745 ; RV32-LABEL: name: insertelement_nxv4i64_21746 ; RV32: bb.1 (%ir-block.0):1747 ; RV32-NEXT: liveins: $x10, $x111748 ; RV32-NEXT: {{ $}}1749 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101750 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x111751 ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1752 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF1753 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01754 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[MV]](s64), [[C]](s32)1755 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1756 ; RV32-NEXT: PseudoRET implicit $v8m41757 ;1758 ; RV64-LABEL: name: insertelement_nxv4i64_21759 ; RV64: bb.1 (%ir-block.0):1760 ; RV64-NEXT: liveins: $x101761 ; RV64-NEXT: {{ $}}1762 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101763 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF1764 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01765 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s64), [[C]](s64)1766 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1767 ; RV64-NEXT: PseudoRET implicit $v8m41768 %a = insertelement <vscale x 4 x i64> poison, i64 %x, i32 01769 ret <vscale x 4 x i64> %a1770}1771 1772define <vscale x 8 x i64> @insertelement_nxv8i64_0() {1773 ; RV32-LABEL: name: insertelement_nxv8i64_01774 ; RV32: bb.1 (%ir-block.0):1775 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF1776 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01777 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01778 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1779 ; RV32-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 8 x s64>)1780 ; RV32-NEXT: PseudoRET implicit $v8m81781 ;1782 ; RV64-LABEL: name: insertelement_nxv8i64_01783 ; RV64: bb.1 (%ir-block.0):1784 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF1785 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01786 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C]](s64)1787 ; RV64-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 8 x s64>)1788 ; RV64-NEXT: PseudoRET implicit $v8m81789 %a = insertelement <vscale x 8 x i64> poison, i64 0, i32 01790 ret <vscale x 8 x i64> %a1791}1792 1793define <vscale x 8 x i64> @insertelement_nxv8i64_1() {1794 ; RV32-LABEL: name: insertelement_nxv8i64_11795 ; RV32: bb.1 (%ir-block.0):1796 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF1797 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11798 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01799 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1800 ; RV32-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 8 x s64>)1801 ; RV32-NEXT: PseudoRET implicit $v8m81802 ;1803 ; RV64-LABEL: name: insertelement_nxv8i64_11804 ; RV64: bb.1 (%ir-block.0):1805 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF1806 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11807 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01808 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s64)1809 ; RV64-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 8 x s64>)1810 ; RV64-NEXT: PseudoRET implicit $v8m81811 %a = insertelement <vscale x 8 x i64> poison, i64 -1, i32 01812 ret <vscale x 8 x i64> %a1813}1814 1815define <vscale x 8 x i64> @insertelement_nxv8i64_2(i64 %x) {1816 ; RV32-LABEL: name: insertelement_nxv8i64_21817 ; RV32: bb.1 (%ir-block.0):1818 ; RV32-NEXT: liveins: $x10, $x111819 ; RV32-NEXT: {{ $}}1820 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101821 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x111822 ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1823 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF1824 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01825 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[MV]](s64), [[C]](s32)1826 ; RV32-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 8 x s64>)1827 ; RV32-NEXT: PseudoRET implicit $v8m81828 ;1829 ; RV64-LABEL: name: insertelement_nxv8i64_21830 ; RV64: bb.1 (%ir-block.0):1831 ; RV64-NEXT: liveins: $x101832 ; RV64-NEXT: {{ $}}1833 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101834 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF1835 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01836 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 8 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s64), [[C]](s64)1837 ; RV64-NEXT: $v8m8 = COPY [[IVEC]](<vscale x 8 x s64>)1838 ; RV64-NEXT: PseudoRET implicit $v8m81839 %a = insertelement <vscale x 8 x i64> poison, i64 %x, i32 01840 ret <vscale x 8 x i64> %a1841}1842 1843define <vscale x 16 x i64> @insertelement_nxv16i64_0() {1844 ; RV32-LABEL: name: insertelement_nxv16i64_01845 ; RV32: bb.1 (%ir-block.0):1846 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s64>) = G_IMPLICIT_DEF1847 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01848 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01849 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1850 ; RV32-NEXT: [[UV:%[0-9]+]]:_(<vscale x 8 x s64>), [[UV1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_UNMERGE_VALUES [[IVEC]](<vscale x 16 x s64>)1851 ; RV32-NEXT: $v8m8 = COPY [[UV]](<vscale x 8 x s64>)1852 ; RV32-NEXT: $v16m8 = COPY [[UV1]](<vscale x 8 x s64>)1853 ; RV32-NEXT: PseudoRET implicit $v8m8, implicit $v16m81854 ;1855 ; RV64-LABEL: name: insertelement_nxv16i64_01856 ; RV64: bb.1 (%ir-block.0):1857 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s64>) = G_IMPLICIT_DEF1858 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01859 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C]](s64)1860 ; RV64-NEXT: [[UV:%[0-9]+]]:_(<vscale x 8 x s64>), [[UV1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_UNMERGE_VALUES [[IVEC]](<vscale x 16 x s64>)1861 ; RV64-NEXT: $v8m8 = COPY [[UV]](<vscale x 8 x s64>)1862 ; RV64-NEXT: $v16m8 = COPY [[UV1]](<vscale x 8 x s64>)1863 ; RV64-NEXT: PseudoRET implicit $v8m8, implicit $v16m81864 %a = insertelement <vscale x 16 x i64> poison, i64 0, i32 01865 ret <vscale x 16 x i64> %a1866}1867 1868define <vscale x 16 x i64> @insertelement_nxv16i64_1() {1869 ; RV32-LABEL: name: insertelement_nxv16i64_11870 ; RV32: bb.1 (%ir-block.0):1871 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s64>) = G_IMPLICIT_DEF1872 ; RV32-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11873 ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 01874 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s32)1875 ; RV32-NEXT: [[UV:%[0-9]+]]:_(<vscale x 8 x s64>), [[UV1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_UNMERGE_VALUES [[IVEC]](<vscale x 16 x s64>)1876 ; RV32-NEXT: $v8m8 = COPY [[UV]](<vscale x 8 x s64>)1877 ; RV32-NEXT: $v16m8 = COPY [[UV1]](<vscale x 8 x s64>)1878 ; RV32-NEXT: PseudoRET implicit $v8m8, implicit $v16m81879 ;1880 ; RV64-LABEL: name: insertelement_nxv16i64_11881 ; RV64: bb.1 (%ir-block.0):1882 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s64>) = G_IMPLICIT_DEF1883 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -11884 ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 01885 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[C]](s64), [[C1]](s64)1886 ; RV64-NEXT: [[UV:%[0-9]+]]:_(<vscale x 8 x s64>), [[UV1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_UNMERGE_VALUES [[IVEC]](<vscale x 16 x s64>)1887 ; RV64-NEXT: $v8m8 = COPY [[UV]](<vscale x 8 x s64>)1888 ; RV64-NEXT: $v16m8 = COPY [[UV1]](<vscale x 8 x s64>)1889 ; RV64-NEXT: PseudoRET implicit $v8m8, implicit $v16m81890 %a = insertelement <vscale x 16 x i64> poison, i64 -1, i32 01891 ret <vscale x 16 x i64> %a1892}1893 1894define <vscale x 16 x i64> @insertelement_nxv16i64_2(i64 %x) {1895 ; RV32-LABEL: name: insertelement_nxv16i64_21896 ; RV32: bb.1 (%ir-block.0):1897 ; RV32-NEXT: liveins: $x10, $x111898 ; RV32-NEXT: {{ $}}1899 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x101900 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x111901 ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1902 ; RV32-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s64>) = G_IMPLICIT_DEF1903 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01904 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[MV]](s64), [[C]](s32)1905 ; RV32-NEXT: [[UV:%[0-9]+]]:_(<vscale x 8 x s64>), [[UV1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_UNMERGE_VALUES [[IVEC]](<vscale x 16 x s64>)1906 ; RV32-NEXT: $v8m8 = COPY [[UV]](<vscale x 8 x s64>)1907 ; RV32-NEXT: $v16m8 = COPY [[UV1]](<vscale x 8 x s64>)1908 ; RV32-NEXT: PseudoRET implicit $v8m8, implicit $v16m81909 ;1910 ; RV64-LABEL: name: insertelement_nxv16i64_21911 ; RV64: bb.1 (%ir-block.0):1912 ; RV64-NEXT: liveins: $x101913 ; RV64-NEXT: {{ $}}1914 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x101915 ; RV64-NEXT: [[DEF:%[0-9]+]]:_(<vscale x 16 x s64>) = G_IMPLICIT_DEF1916 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01917 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 16 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s64), [[C]](s64)1918 ; RV64-NEXT: [[UV:%[0-9]+]]:_(<vscale x 8 x s64>), [[UV1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_UNMERGE_VALUES [[IVEC]](<vscale x 16 x s64>)1919 ; RV64-NEXT: $v8m8 = COPY [[UV]](<vscale x 8 x s64>)1920 ; RV64-NEXT: $v16m8 = COPY [[UV1]](<vscale x 8 x s64>)1921 ; RV64-NEXT: PseudoRET implicit $v8m8, implicit $v16m81922 %a = insertelement <vscale x 16 x i64> poison, i64 %x, i32 01923 ret <vscale x 16 x i64> %a1924}1925 1926define <vscale x 4 x i64> @insertelement_nxv4i64(<vscale x 4 x i64> %v, i64 %x) {1927 ; RV32-LABEL: name: insertelement_nxv4i641928 ; RV32: bb.1 (%ir-block.0):1929 ; RV32-NEXT: liveins: $x10, $x11, $v8m41930 ; RV32-NEXT: {{ $}}1931 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s64>) = COPY $v8m41932 ; RV32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x101933 ; RV32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x111934 ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)1935 ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 01936 ; RV32-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[COPY]], [[MV]](s64), [[C]](s32)1937 ; RV32-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1938 ; RV32-NEXT: PseudoRET implicit $v8m41939 ;1940 ; RV64-LABEL: name: insertelement_nxv4i641941 ; RV64: bb.1 (%ir-block.0):1942 ; RV64-NEXT: liveins: $x10, $v8m41943 ; RV64-NEXT: {{ $}}1944 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s64>) = COPY $v8m41945 ; RV64-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x101946 ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 01947 ; RV64-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x s64>) = G_INSERT_VECTOR_ELT [[COPY]], [[COPY1]](s64), [[C]](s64)1948 ; RV64-NEXT: $v8m4 = COPY [[IVEC]](<vscale x 4 x s64>)1949 ; RV64-NEXT: PseudoRET implicit $v8m41950 %a = insertelement <vscale x 4 x i64> %v, i64 %x, i32 01951 ret <vscale x 4 x i64> %a1952}1953