286 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s3 4define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_1(i32 %index) {5; CHECK-LABEL: vidup_v4i32_1:6; CHECK: @ %bb.0:7; CHECK-NEXT: vidup.u32 q0, r0, #18; CHECK-NEXT: bx lr9 %a1 = add i32 %index, 110 %a2 = add i32 %index, 211 %a3 = add i32 %index, 312 %a4 = add i32 %index, 413 %v1 = insertelement <4 x i32> poison, i32 %index, i32 014 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 115 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 216 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 317 ret <4 x i32> %v418}19 20define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_2(i32 %index) {21; CHECK-LABEL: vidup_v4i32_2:22; CHECK: @ %bb.0:23; CHECK-NEXT: vidup.u32 q0, r0, #224; CHECK-NEXT: bx lr25 %a1 = add i32 %index, 226 %a2 = add i32 %index, 427 %a3 = add i32 %index, 628 %a4 = add i32 %index, 829 %v1 = insertelement <4 x i32> poison, i32 %index, i32 030 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 131 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 232 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 333 ret <4 x i32> %v434}35 36define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_3(i32 %index) {37; CHECK-LABEL: vidup_v4i32_3:38; CHECK: @ %bb.0:39; CHECK-NEXT: adds r1, r0, #640; CHECK-NEXT: vmov q0[2], q0[0], r0, r141; CHECK-NEXT: add.w r1, r0, #942; CHECK-NEXT: adds r0, #343; CHECK-NEXT: vmov q0[3], q0[1], r0, r144; CHECK-NEXT: bx lr45 %a1 = add i32 %index, 346 %a2 = add i32 %index, 647 %a3 = add i32 %index, 948 %a4 = add i32 %index, 1249 %v1 = insertelement <4 x i32> poison, i32 %index, i32 050 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 151 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 252 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 353 ret <4 x i32> %v454}55 56define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_4(i32 %index) {57; CHECK-LABEL: vidup_v4i32_4:58; CHECK: @ %bb.0:59; CHECK-NEXT: vidup.u32 q0, r0, #460; CHECK-NEXT: bx lr61 %a1 = add i32 %index, 462 %a2 = add i32 %index, 863 %a3 = add i32 %index, 1264 %a4 = add i32 %index, 1665 %v1 = insertelement <4 x i32> poison, i32 %index, i32 066 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 167 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 268 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 369 ret <4 x i32> %v470}71 72define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_8(i32 %index) {73; CHECK-LABEL: vidup_v4i32_8:74; CHECK: @ %bb.0:75; CHECK-NEXT: vidup.u32 q0, r0, #876; CHECK-NEXT: bx lr77 %a1 = add i32 %index, 878 %a2 = add i32 %index, 1679 %a3 = add i32 %index, 2480 %a4 = add i32 %index, 3281 %v1 = insertelement <4 x i32> poison, i32 %index, i32 082 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 183 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 284 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 385 ret <4 x i32> %v486}87 88define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_1_i(i32 %index) {89; CHECK-LABEL: vidup_v4i32_1_i:90; CHECK: @ %bb.0:91; CHECK-NEXT: adds r1, r0, #392; CHECK-NEXT: adds r2, r0, #193; CHECK-NEXT: vmov q0[2], q0[0], r2, r194; CHECK-NEXT: adds r1, r0, #495; CHECK-NEXT: adds r0, #296; CHECK-NEXT: vmov q0[3], q0[1], r0, r197; CHECK-NEXT: bx lr98 %a1 = add i32 %index, 199 %a2 = add i32 %index, 2100 %a3 = add i32 %index, 3101 %a4 = add i32 %index, 4102 %v1 = insertelement <4 x i32> poison, i32 %a1, i32 0103 %v2 = insertelement <4 x i32> %v1, i32 %a2, i32 1104 %v3 = insertelement <4 x i32> %v2, i32 %a3, i32 2105 %v4 = insertelement <4 x i32> %v3, i32 %a4, i32 3106 ret <4 x i32> %v4107}108 109define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_1(i16 %index) {110; CHECK-LABEL: vidup_v8i16_1:111; CHECK: @ %bb.0:112; CHECK-NEXT: vidup.u16 q0, r0, #1113; CHECK-NEXT: bx lr114 %a1 = add i16 %index, 1115 %a2 = add i16 %index, 2116 %a3 = add i16 %index, 3117 %a4 = add i16 %index, 4118 %a5 = add i16 %index, 5119 %a6 = add i16 %index, 6120 %a7 = add i16 %index, 7121 %a8 = add i16 %index, 8122 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0123 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1124 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2125 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3126 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4127 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5128 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6129 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7130 ret <8 x i16> %v8131}132 133define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_2(i16 %index) {134; CHECK-LABEL: vidup_v8i16_2:135; CHECK: @ %bb.0:136; CHECK-NEXT: vidup.u16 q0, r0, #2137; CHECK-NEXT: bx lr138 %a1 = add i16 %index, 2139 %a2 = add i16 %index, 4140 %a3 = add i16 %index, 6141 %a4 = add i16 %index, 8142 %a5 = add i16 %index, 10143 %a6 = add i16 %index, 12144 %a7 = add i16 %index, 14145 %a8 = add i16 %index, 16146 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0147 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1148 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2149 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3150 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4151 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5152 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6153 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7154 ret <8 x i16> %v8155}156 157define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_4(i16 %index) {158; CHECK-LABEL: vidup_v8i16_4:159; CHECK: @ %bb.0:160; CHECK-NEXT: vidup.u16 q0, r0, #4161; CHECK-NEXT: bx lr162 %a1 = add i16 %index, 4163 %a2 = add i16 %index, 8164 %a3 = add i16 %index, 12165 %a4 = add i16 %index, 16166 %a5 = add i16 %index, 20167 %a6 = add i16 %index, 24168 %a7 = add i16 %index, 28169 %a8 = add i16 %index, 32170 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0171 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1172 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2173 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3174 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4175 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5176 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6177 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7178 ret <8 x i16> %v8179}180 181define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_8(i16 %index) {182; CHECK-LABEL: vidup_v8i16_8:183; CHECK: @ %bb.0:184; CHECK-NEXT: vidup.u16 q0, r0, #8185; CHECK-NEXT: bx lr186 %a1 = add i16 %index, 8187 %a2 = add i16 %index, 16188 %a3 = add i16 %index, 24189 %a4 = add i16 %index, 32190 %a5 = add i16 %index, 40191 %a6 = add i16 %index, 48192 %a7 = add i16 %index, 56193 %a8 = add i16 %index, 64194 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0195 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1196 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2197 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3198 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4199 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5200 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6201 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7202 ret <8 x i16> %v8203}204 205define arm_aapcs_vfpcc <16 x i8> @vidup_v16i8_1(i8 %index) {206; CHECK-LABEL: vidup_v16i8_1:207; CHECK: @ %bb.0:208; CHECK-NEXT: vidup.u8 q0, r0, #1209; CHECK-NEXT: bx lr210 %a1 = add i8 %index, 1211 %a2 = add i8 %index, 2212 %a3 = add i8 %index, 3213 %a4 = add i8 %index, 4214 %a5 = add i8 %index, 5215 %a6 = add i8 %index, 6216 %a7 = add i8 %index, 7217 %a8 = add i8 %index, 8218 %a9 = add i8 %index, 9219 %a10 = add i8 %index, 10220 %a11 = add i8 %index, 11221 %a12 = add i8 %index, 12222 %a13 = add i8 %index, 13223 %a14 = add i8 %index, 14224 %a15 = add i8 %index, 15225 %a16 = add i8 %index, 16226 %v1 = insertelement <16 x i8> poison, i8 %index, i32 0227 %v2 = insertelement <16 x i8> %v1, i8 %a1, i32 1228 %v3 = insertelement <16 x i8> %v2, i8 %a2, i32 2229 %v4 = insertelement <16 x i8> %v3, i8 %a3, i32 3230 %v5 = insertelement <16 x i8> %v4, i8 %a4, i32 4231 %v6 = insertelement <16 x i8> %v5, i8 %a5, i32 5232 %v7 = insertelement <16 x i8> %v6, i8 %a6, i32 6233 %v8 = insertelement <16 x i8> %v7, i8 %a7, i32 7234 %v9 = insertelement <16 x i8> %v8, i8 %a8, i32 8235 %v10 = insertelement <16 x i8> %v9, i8 %a9, i32 9236 %v11 = insertelement <16 x i8> %v10, i8 %a10, i32 10237 %v12 = insertelement <16 x i8> %v11, i8 %a11, i32 11238 %v13 = insertelement <16 x i8> %v12, i8 %a12, i32 12239 %v14 = insertelement <16 x i8> %v13, i8 %a13, i32 13240 %v15 = insertelement <16 x i8> %v14, i8 %a14, i32 14241 %v16 = insertelement <16 x i8> %v15, i8 %a15, i32 15242 ret <16 x i8> %v16243}244 245define arm_aapcs_vfpcc <16 x i8> @vidup_v16i8_4(i8 %index) {246; CHECK-LABEL: vidup_v16i8_4:247; CHECK: @ %bb.0:248; CHECK-NEXT: vidup.u8 q0, r0, #4249; CHECK-NEXT: bx lr250 %a1 = add i8 %index, 4251 %a2 = add i8 %index, 8252 %a3 = add i8 %index, 12253 %a4 = add i8 %index, 16254 %a5 = add i8 %index, 20255 %a6 = add i8 %index, 24256 %a7 = add i8 %index, 28257 %a8 = add i8 %index, 32258 %a9 = add i8 %index, 36259 %a10 = add i8 %index, 40260 %a11 = add i8 %index, 44261 %a12 = add i8 %index, 48262 %a13 = add i8 %index, 52263 %a14 = add i8 %index, 56264 %a15 = add i8 %index, 60265 %a16 = add i8 %index, 64266 %v1 = insertelement <16 x i8> poison, i8 %index, i32 0267 %v2 = insertelement <16 x i8> %v1, i8 %a1, i32 1268 %v3 = insertelement <16 x i8> %v2, i8 %a2, i32 2269 %v4 = insertelement <16 x i8> %v3, i8 %a3, i32 3270 %v5 = insertelement <16 x i8> %v4, i8 %a4, i32 4271 %v6 = insertelement <16 x i8> %v5, i8 %a5, i32 5272 %v7 = insertelement <16 x i8> %v6, i8 %a6, i32 6273 %v8 = insertelement <16 x i8> %v7, i8 %a7, i32 7274 %v9 = insertelement <16 x i8> %v8, i8 %a8, i32 8275 %v10 = insertelement <16 x i8> %v9, i8 %a9, i32 9276 %v11 = insertelement <16 x i8> %v10, i8 %a10, i32 10277 %v12 = insertelement <16 x i8> %v11, i8 %a11, i32 11278 %v13 = insertelement <16 x i8> %v12, i8 %a12, i32 12279 %v14 = insertelement <16 x i8> %v13, i8 %a13, i32 13280 %v15 = insertelement <16 x i8> %v14, i8 %a14, i32 14281 %v16 = insertelement <16 x i8> %v15, i8 %a15, i32 15282 ret <16 x i8> %v16283}284 285 286