1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s 3 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, #1 8; CHECK-NEXT: bx lr 9 %a1 = add i32 %index, 1 10 %a2 = add i32 %index, 2 11 %a3 = add i32 %index, 3 12 %a4 = add i32 %index, 4 13 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0 14 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1 15 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2 16 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3 17 ret <4 x i32> %v4 18} 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, #2 24; CHECK-NEXT: bx lr 25 %a1 = add i32 %index, 2 26 %a2 = add i32 %index, 4 27 %a3 = add i32 %index, 6 28 %a4 = add i32 %index, 8 29 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0 30 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1 31 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2 32 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3 33 ret <4 x i32> %v4 34} 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, #6 40; CHECK-NEXT: vmov q0[2], q0[0], r0, r1 41; CHECK-NEXT: add.w r1, r0, #9 42; CHECK-NEXT: adds r0, #3 43; CHECK-NEXT: vmov q0[3], q0[1], r0, r1 44; CHECK-NEXT: bx lr 45 %a1 = add i32 %index, 3 46 %a2 = add i32 %index, 6 47 %a3 = add i32 %index, 9 48 %a4 = add i32 %index, 12 49 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0 50 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1 51 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2 52 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3 53 ret <4 x i32> %v4 54} 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, #4 60; CHECK-NEXT: bx lr 61 %a1 = add i32 %index, 4 62 %a2 = add i32 %index, 8 63 %a3 = add i32 %index, 12 64 %a4 = add i32 %index, 16 65 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0 66 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1 67 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2 68 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3 69 ret <4 x i32> %v4 70} 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, #8 76; CHECK-NEXT: bx lr 77 %a1 = add i32 %index, 8 78 %a2 = add i32 %index, 16 79 %a3 = add i32 %index, 24 80 %a4 = add i32 %index, 32 81 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0 82 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1 83 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2 84 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3 85 ret <4 x i32> %v4 86} 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, #3 92; CHECK-NEXT: adds r2, r0, #1 93; CHECK-NEXT: vmov q0[2], q0[0], r2, r1 94; CHECK-NEXT: adds r1, r0, #4 95; CHECK-NEXT: adds r0, #2 96; CHECK-NEXT: vmov q0[3], q0[1], r0, r1 97; CHECK-NEXT: bx lr 98 %a1 = add i32 %index, 1 99 %a2 = add i32 %index, 2 100 %a3 = add i32 %index, 3 101 %a4 = add i32 %index, 4 102 %v1 = insertelement <4 x i32> poison, i32 %a1, i32 0 103 %v2 = insertelement <4 x i32> %v1, i32 %a2, i32 1 104 %v3 = insertelement <4 x i32> %v2, i32 %a3, i32 2 105 %v4 = insertelement <4 x i32> %v3, i32 %a4, i32 3 106 ret <4 x i32> %v4 107} 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, #1 113; CHECK-NEXT: bx lr 114 %a1 = add i16 %index, 1 115 %a2 = add i16 %index, 2 116 %a3 = add i16 %index, 3 117 %a4 = add i16 %index, 4 118 %a5 = add i16 %index, 5 119 %a6 = add i16 %index, 6 120 %a7 = add i16 %index, 7 121 %a8 = add i16 %index, 8 122 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0 123 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1 124 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2 125 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3 126 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4 127 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5 128 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6 129 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7 130 ret <8 x i16> %v8 131} 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, #2 137; CHECK-NEXT: bx lr 138 %a1 = add i16 %index, 2 139 %a2 = add i16 %index, 4 140 %a3 = add i16 %index, 6 141 %a4 = add i16 %index, 8 142 %a5 = add i16 %index, 10 143 %a6 = add i16 %index, 12 144 %a7 = add i16 %index, 14 145 %a8 = add i16 %index, 16 146 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0 147 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1 148 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2 149 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3 150 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4 151 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5 152 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6 153 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7 154 ret <8 x i16> %v8 155} 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, #4 161; CHECK-NEXT: bx lr 162 %a1 = add i16 %index, 4 163 %a2 = add i16 %index, 8 164 %a3 = add i16 %index, 12 165 %a4 = add i16 %index, 16 166 %a5 = add i16 %index, 20 167 %a6 = add i16 %index, 24 168 %a7 = add i16 %index, 28 169 %a8 = add i16 %index, 32 170 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0 171 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1 172 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2 173 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3 174 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4 175 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5 176 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6 177 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7 178 ret <8 x i16> %v8 179} 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, #8 185; CHECK-NEXT: bx lr 186 %a1 = add i16 %index, 8 187 %a2 = add i16 %index, 16 188 %a3 = add i16 %index, 24 189 %a4 = add i16 %index, 32 190 %a5 = add i16 %index, 40 191 %a6 = add i16 %index, 48 192 %a7 = add i16 %index, 56 193 %a8 = add i16 %index, 64 194 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0 195 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1 196 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2 197 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3 198 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4 199 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5 200 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6 201 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7 202 ret <8 x i16> %v8 203} 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, #1 209; CHECK-NEXT: bx lr 210 %a1 = add i8 %index, 1 211 %a2 = add i8 %index, 2 212 %a3 = add i8 %index, 3 213 %a4 = add i8 %index, 4 214 %a5 = add i8 %index, 5 215 %a6 = add i8 %index, 6 216 %a7 = add i8 %index, 7 217 %a8 = add i8 %index, 8 218 %a9 = add i8 %index, 9 219 %a10 = add i8 %index, 10 220 %a11 = add i8 %index, 11 221 %a12 = add i8 %index, 12 222 %a13 = add i8 %index, 13 223 %a14 = add i8 %index, 14 224 %a15 = add i8 %index, 15 225 %a16 = add i8 %index, 16 226 %v1 = insertelement <16 x i8> poison, i8 %index, i32 0 227 %v2 = insertelement <16 x i8> %v1, i8 %a1, i32 1 228 %v3 = insertelement <16 x i8> %v2, i8 %a2, i32 2 229 %v4 = insertelement <16 x i8> %v3, i8 %a3, i32 3 230 %v5 = insertelement <16 x i8> %v4, i8 %a4, i32 4 231 %v6 = insertelement <16 x i8> %v5, i8 %a5, i32 5 232 %v7 = insertelement <16 x i8> %v6, i8 %a6, i32 6 233 %v8 = insertelement <16 x i8> %v7, i8 %a7, i32 7 234 %v9 = insertelement <16 x i8> %v8, i8 %a8, i32 8 235 %v10 = insertelement <16 x i8> %v9, i8 %a9, i32 9 236 %v11 = insertelement <16 x i8> %v10, i8 %a10, i32 10 237 %v12 = insertelement <16 x i8> %v11, i8 %a11, i32 11 238 %v13 = insertelement <16 x i8> %v12, i8 %a12, i32 12 239 %v14 = insertelement <16 x i8> %v13, i8 %a13, i32 13 240 %v15 = insertelement <16 x i8> %v14, i8 %a14, i32 14 241 %v16 = insertelement <16 x i8> %v15, i8 %a15, i32 15 242 ret <16 x i8> %v16 243} 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, #4 249; CHECK-NEXT: bx lr 250 %a1 = add i8 %index, 4 251 %a2 = add i8 %index, 8 252 %a3 = add i8 %index, 12 253 %a4 = add i8 %index, 16 254 %a5 = add i8 %index, 20 255 %a6 = add i8 %index, 24 256 %a7 = add i8 %index, 28 257 %a8 = add i8 %index, 32 258 %a9 = add i8 %index, 36 259 %a10 = add i8 %index, 40 260 %a11 = add i8 %index, 44 261 %a12 = add i8 %index, 48 262 %a13 = add i8 %index, 52 263 %a14 = add i8 %index, 56 264 %a15 = add i8 %index, 60 265 %a16 = add i8 %index, 64 266 %v1 = insertelement <16 x i8> poison, i8 %index, i32 0 267 %v2 = insertelement <16 x i8> %v1, i8 %a1, i32 1 268 %v3 = insertelement <16 x i8> %v2, i8 %a2, i32 2 269 %v4 = insertelement <16 x i8> %v3, i8 %a3, i32 3 270 %v5 = insertelement <16 x i8> %v4, i8 %a4, i32 4 271 %v6 = insertelement <16 x i8> %v5, i8 %a5, i32 5 272 %v7 = insertelement <16 x i8> %v6, i8 %a6, i32 6 273 %v8 = insertelement <16 x i8> %v7, i8 %a7, i32 7 274 %v9 = insertelement <16 x i8> %v8, i8 %a8, i32 8 275 %v10 = insertelement <16 x i8> %v9, i8 %a9, i32 9 276 %v11 = insertelement <16 x i8> %v10, i8 %a10, i32 10 277 %v12 = insertelement <16 x i8> %v11, i8 %a11, i32 11 278 %v13 = insertelement <16 x i8> %v12, i8 %a12, i32 12 279 %v14 = insertelement <16 x i8> %v13, i8 %a13, i32 13 280 %v15 = insertelement <16 x i8> %v14, i8 %a14, i32 14 281 %v16 = insertelement <16 x i8> %v15, i8 %a15, i32 15 282 ret <16 x i8> %v16 283} 284 285 286