1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=aarch64 -run-pass=legalizer %s -o - | FileCheck %s 3--- 4name: test_scalar_add_big 5body: | 6 bb.0.entry: 7 ; CHECK-LABEL: name: test_scalar_add_big 8 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 9 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 10 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2 11 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3 12 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]] 13 ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[UADDO1]] 14 ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64) 15 ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64) 16 %0:_(s64) = COPY $x0 17 %1:_(s64) = COPY $x1 18 %2:_(s64) = COPY $x2 19 %3:_(s64) = COPY $x3 20 %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64) 21 %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64) 22 %6:_(s128) = G_ADD %4, %5 23 %7:_(s64), %8:_(s64) = G_UNMERGE_VALUES %6(s128) 24 $x0 = COPY %7(s64) 25 $x1 = COPY %8(s64) 26 27... 28--- 29name: test_scalar_add_big_nonpow2 30body: | 31 bb.0.entry: 32 ; CHECK-LABEL: name: test_scalar_add_big_nonpow2 33 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 34 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 35 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2 36 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3 37 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY1]] 38 ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY2]], [[UADDO1]] 39 ; CHECK-NEXT: [[UADDE2:%[0-9]+]]:_(s64), [[UADDE3:%[0-9]+]]:_(s32) = G_UADDE [[COPY2]], [[COPY3]], [[UADDE1]] 40 ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64) 41 ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64) 42 ; CHECK-NEXT: $x2 = COPY [[UADDE2]](s64) 43 %0:_(s64) = COPY $x0 44 %1:_(s64) = COPY $x1 45 %2:_(s64) = COPY $x2 46 %3:_(s64) = COPY $x3 47 %4:_(s192) = G_MERGE_VALUES %0(s64), %1(s64), %2(s64) 48 %5:_(s192) = G_MERGE_VALUES %1(s64), %2(s64), %3(s64) 49 %6:_(s192) = G_ADD %4, %5 50 %7:_(s64), %8:_(s64), %9:_(s64) = G_UNMERGE_VALUES %6(s192) 51 $x0 = COPY %7(s64) 52 $x1 = COPY %8(s64) 53 $x2 = COPY %9(s64) 54 55... 56--- 57name: test_scalar_add_small 58body: | 59 bb.0.entry: 60 ; CHECK-LABEL: name: test_scalar_add_small 61 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 62 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 63 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 64 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 65 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[TRUNC]], [[TRUNC1]] 66 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ADD]](s32) 67 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64) 68 %0:_(s64) = COPY $x0 69 %1:_(s64) = COPY $x1 70 %2:_(s8) = G_TRUNC %0(s64) 71 %3:_(s8) = G_TRUNC %1(s64) 72 %4:_(s8) = G_ADD %2, %3 73 %5:_(s64) = G_ANYEXT %4(s8) 74 $x0 = COPY %5(s64) 75 76... 77--- 78name: test_scalar_add_narrowing 79body: | 80 bb.0.entry: 81 ; CHECK-LABEL: name: test_scalar_add_narrowing 82 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 83 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 84 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2 85 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3 86 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]] 87 ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[UADDO1]] 88 ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64) 89 ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64) 90 %0:_(s64) = COPY $x0 91 %1:_(s64) = COPY $x1 92 %2:_(s64) = COPY $x2 93 %3:_(s64) = COPY $x3 94 %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64) 95 %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64) 96 %6:_(s96) = G_TRUNC %4(s128) 97 %7:_(s96) = G_TRUNC %5(s128) 98 %8:_(s96) = G_ADD %6, %7 99 %9:_(s128) = G_ANYEXT %8(s96) 100 %10:_(s64), %11:_(s64) = G_UNMERGE_VALUES %9(s128) 101 $x0 = COPY %10(s64) 102 $x1 = COPY %11(s64) 103 104... 105--- 106name: test_scalar_add_narrowing_s65 107body: | 108 bb.0.entry: 109 ; CHECK-LABEL: name: test_scalar_add_narrowing_s65 110 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 111 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 112 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2 113 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3 114 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]] 115 ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[UADDO1]] 116 ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64) 117 ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64) 118 %0:_(s64) = COPY $x0 119 %1:_(s64) = COPY $x1 120 %2:_(s64) = COPY $x2 121 %3:_(s64) = COPY $x3 122 %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64) 123 %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64) 124 %6:_(s65) = G_TRUNC %4(s128) 125 %7:_(s65) = G_TRUNC %5(s128) 126 %8:_(s65) = G_ADD %6, %7 127 %9:_(s128) = G_ANYEXT %8(s65) 128 %10:_(s64), %11:_(s64) = G_UNMERGE_VALUES %9(s128) 129 $x0 = COPY %10(s64) 130 $x1 = COPY %11(s64) 131 132... 133--- 134name: test_vector_add 135body: | 136 bb.0.entry: 137 ; CHECK-LABEL: name: test_vector_add 138 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0 139 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1 140 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $q2 141 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s64>) = COPY $q3 142 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY]], [[COPY2]] 143 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY1]], [[COPY3]] 144 ; CHECK-NEXT: $q0 = COPY [[ADD]](<2 x s64>) 145 ; CHECK-NEXT: $q1 = COPY [[ADD1]](<2 x s64>) 146 %0:_(<2 x s64>) = COPY $q0 147 %1:_(<2 x s64>) = COPY $q1 148 %2:_(<2 x s64>) = COPY $q2 149 %3:_(<2 x s64>) = COPY $q3 150 %4:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1 151 %5:_(<4 x s64>) = G_CONCAT_VECTORS %2, %3 152 %6:_(<4 x s64>) = G_ADD %4, %5 153 %7:_(<2 x s64>), %8:_(<2 x s64>) = G_UNMERGE_VALUES %6(<4 x s64>) 154 $q0 = COPY %7(<2 x s64>) 155 $q1 = COPY %8(<2 x s64>) 156 157... 158--- 159name: test_vector_add_v16s16 160body: | 161 bb.0.entry: 162 ; CHECK-LABEL: name: test_vector_add_v16s16 163 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0 164 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1 165 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY]], [[COPY]] 166 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY1]], [[COPY1]] 167 ; CHECK-NEXT: $q0 = COPY [[ADD]](<8 x s16>) 168 ; CHECK-NEXT: $q1 = COPY [[ADD1]](<8 x s16>) 169 %1:_(<8 x s16>) = COPY $q0 170 %2:_(<8 x s16>) = COPY $q1 171 %0:_(<16 x s16>) = G_CONCAT_VECTORS %1(<8 x s16>), %2(<8 x s16>) 172 %3:_(<16 x s16>) = G_ADD %0, %0 173 %4:_(<8 x s16>), %5:_(<8 x s16>) = G_UNMERGE_VALUES %3(<16 x s16>) 174 $q0 = COPY %4(<8 x s16>) 175 $q1 = COPY %5(<8 x s16>) 176 177... 178--- 179name: test_vector_add_v32s8 180body: | 181 bb.0.entry: 182 ; CHECK-LABEL: name: test_vector_add_v32s8 183 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0 184 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1 185 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY]], [[COPY]] 186 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY1]], [[COPY1]] 187 ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>) 188 ; CHECK-NEXT: $q1 = COPY [[ADD1]](<16 x s8>) 189 %0:_(<16 x s8>) = COPY $q0 190 %1:_(<16 x s8>) = COPY $q1 191 %2:_(<32 x s8>) = G_CONCAT_VECTORS %0, %1 192 %3:_(<32 x s8>) = G_ADD %2, %2 193 %7:_(<16 x s8>), %8:_(<16 x s8>) = G_UNMERGE_VALUES %3(<32 x s8>) 194 $q0 = COPY %7(<16 x s8>) 195 $q1 = COPY %8(<16 x s8>) 196 197... 198--- 199name: test_vector_add_nonpow2 200body: | 201 bb.0.entry: 202 ; CHECK-LABEL: name: test_vector_add_nonpow2 203 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0 204 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1 205 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $q2 206 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s64>) = COPY $q3 207 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY]], [[COPY1]] 208 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY1]], [[COPY2]] 209 ; CHECK-NEXT: [[ADD2:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY2]], [[COPY3]] 210 ; CHECK-NEXT: $q0 = COPY [[ADD]](<2 x s64>) 211 ; CHECK-NEXT: $q1 = COPY [[ADD1]](<2 x s64>) 212 ; CHECK-NEXT: $q2 = COPY [[ADD2]](<2 x s64>) 213 %0:_(<2 x s64>) = COPY $q0 214 %1:_(<2 x s64>) = COPY $q1 215 %2:_(<2 x s64>) = COPY $q2 216 %3:_(<2 x s64>) = COPY $q3 217 %4:_(<6 x s64>) = G_CONCAT_VECTORS %0(<2 x s64>), %1(<2 x s64>), %2(<2 x s64>) 218 %5:_(<6 x s64>) = G_CONCAT_VECTORS %1(<2 x s64>), %2(<2 x s64>), %3(<2 x s64>) 219 %6:_(<6 x s64>) = G_ADD %4, %5 220 %7:_(<2 x s64>), %8:_(<2 x s64>), %9:_(<2 x s64>) = G_UNMERGE_VALUES %6(<6 x s64>) 221 $q0 = COPY %7(<2 x s64>) 222 $q1 = COPY %8(<2 x s64>) 223 $q2 = COPY %9(<2 x s64>) 224... 225--- 226name: add_v8i16 227alignment: 4 228tracksRegLiveness: true 229machineFunctionInfo: {} 230body: | 231 bb.1: 232 liveins: $q0, $q1 233 234 ; CHECK-LABEL: name: add_v8i16 235 ; CHECK: liveins: $q0, $q1 236 ; CHECK-NEXT: {{ $}} 237 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0 238 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1 239 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY]], [[COPY1]] 240 ; CHECK-NEXT: $q0 = COPY [[ADD]](<8 x s16>) 241 ; CHECK-NEXT: RET_ReallyLR implicit $q0 242 %0:_(<8 x s16>) = COPY $q0 243 %1:_(<8 x s16>) = COPY $q1 244 %2:_(<8 x s16>) = G_ADD %0, %1 245 $q0 = COPY %2(<8 x s16>) 246 RET_ReallyLR implicit $q0 247 248... 249--- 250name: add_v16i8 251alignment: 4 252tracksRegLiveness: true 253machineFunctionInfo: {} 254body: | 255 bb.1: 256 liveins: $q0, $q1 257 258 ; CHECK-LABEL: name: add_v16i8 259 ; CHECK: liveins: $q0, $q1 260 ; CHECK-NEXT: {{ $}} 261 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0 262 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1 263 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY]], [[COPY1]] 264 ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>) 265 ; CHECK-NEXT: RET_ReallyLR implicit $q0 266 %0:_(<16 x s8>) = COPY $q0 267 %1:_(<16 x s8>) = COPY $q1 268 %2:_(<16 x s8>) = G_ADD %0, %1 269 $q0 = COPY %2(<16 x s8>) 270 RET_ReallyLR implicit $q0 271 272... 273--- 274name: add_v4i16 275alignment: 4 276tracksRegLiveness: true 277machineFunctionInfo: {} 278body: | 279 bb.1: 280 liveins: $d0, $d1 281 282 ; CHECK-LABEL: name: add_v4i16 283 ; CHECK: liveins: $d0, $d1 284 ; CHECK-NEXT: {{ $}} 285 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0 286 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1 287 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[COPY]], [[COPY1]] 288 ; CHECK-NEXT: $d0 = COPY [[ADD]](<4 x s16>) 289 ; CHECK-NEXT: RET_ReallyLR implicit $d0 290 %0:_(<4 x s16>) = COPY $d0 291 %1:_(<4 x s16>) = COPY $d1 292 %2:_(<4 x s16>) = G_ADD %0, %1 293 $d0 = COPY %2(<4 x s16>) 294 RET_ReallyLR implicit $d0 295... 296--- 297name: add_v8s8 298tracksRegLiveness: true 299body: | 300 bb.1: 301 liveins: $d0, $d1 302 303 ; CHECK-LABEL: name: add_v8s8 304 ; CHECK: liveins: $d0, $d1 305 ; CHECK-NEXT: {{ $}} 306 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0 307 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1 308 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s8>) = G_ADD [[COPY]], [[COPY1]] 309 ; CHECK-NEXT: $d0 = COPY [[ADD]](<8 x s8>) 310 ; CHECK-NEXT: RET_ReallyLR implicit $d0 311 %0:_(<8 x s8>) = COPY $d0 312 %1:_(<8 x s8>) = COPY $d1 313 %2:_(<8 x s8>) = G_ADD %0, %1 314 $d0 = COPY %2(<8 x s8>) 315 RET_ReallyLR implicit $d0 316 317... 318--- 319name: add_v2s1 320tracksRegLiveness: true 321body: | 322 bb.1: 323 liveins: $d0, $d1, $d2, $d3 324 325 ; CHECK-LABEL: name: add_v2s1 326 ; CHECK: liveins: $d0, $d1, $d2, $d3 327 ; CHECK-NEXT: {{ $}} 328 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0 329 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1 330 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $d2 331 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $d3 332 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY]](<2 x s32>), [[COPY1]] 333 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY2]](<2 x s32>), [[COPY3]] 334 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s32>) = G_ADD [[ICMP]], [[ICMP1]] 335 ; CHECK-NEXT: $d0 = COPY [[ADD]](<2 x s32>) 336 ; CHECK-NEXT: RET_ReallyLR implicit $d0 337 %0:_(<2 x s32>) = COPY $d0 338 %1:_(<2 x s32>) = COPY $d1 339 %2:_(<2 x s32>) = COPY $d2 340 %3:_(<2 x s32>) = COPY $d3 341 %4:_(<2 x s1>) = G_ICMP intpred(eq), %0(<2 x s32>), %1 342 %5:_(<2 x s1>) = G_ICMP intpred(eq), %2(<2 x s32>), %3 343 %6:_(<2 x s1>) = G_ADD %4, %5 344 %7:_(<2 x s32>) = G_ANYEXT %6 345 $d0 = COPY %7:_(<2 x s32>) 346 RET_ReallyLR implicit $d0 347... 348--- 349name: add_v3s1 350tracksRegLiveness: true 351body: | 352 bb.1: 353 liveins: $b0, $b1, $b2 354 355 ; CHECK-LABEL: name: add_v3s1 356 ; CHECK: liveins: $b0, $b1, $b2 357 ; CHECK-NEXT: {{ $}} 358 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $b0 359 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s8) = COPY $b1 360 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s8) = COPY $b2 361 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY]](s8) 362 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY1]](s8) 363 ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY2]](s8) 364 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF 365 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[ANYEXT]](s16), [[ANYEXT1]](s16), [[ANYEXT2]](s16), [[DEF]](s16) 366 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[BUILD_VECTOR]], [[BUILD_VECTOR]] 367 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[ADD]](<4 x s16>) 368 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV]](s16) 369 ; CHECK-NEXT: $b0 = COPY [[TRUNC]](s8) 370 ; CHECK-NEXT: RET_ReallyLR implicit $b0 371 %1:_(s8) = COPY $b0 372 %2:_(s8) = COPY $b1 373 %3:_(s8) = COPY $b2 374 %4:_(<3 x s8>) = G_BUILD_VECTOR %1(s8), %2(s8), %3(s8) 375 %0:_(<3 x s1>) = G_TRUNC %4(<3 x s8>) 376 %5:_(<3 x s1>) = G_ADD %0, %0 377 %7:_(<3 x s8>) = G_ANYEXT %5(<3 x s1>) 378 %8:_(s8), %9:_(s8), %10:_(s8) = G_UNMERGE_VALUES %7(<3 x s8>) 379 $b0 = COPY %8:_(s8) 380 RET_ReallyLR implicit $b0 381... 382--- 383name: add_v4s1 384tracksRegLiveness: true 385body: | 386 bb.1: 387 liveins: $d0, $d1, $d2, $d3 388 389 ; CHECK-LABEL: name: add_v4s1 390 ; CHECK: liveins: $d0, $d1, $d2, $d3 391 ; CHECK-NEXT: {{ $}} 392 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0 393 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1 394 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $d2 395 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<4 x s16>) = COPY $d3 396 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY]](<4 x s16>), [[COPY1]] 397 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY2]](<4 x s16>), [[COPY3]] 398 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[ICMP]], [[ICMP1]] 399 ; CHECK-NEXT: $d0 = COPY [[ADD]](<4 x s16>) 400 ; CHECK-NEXT: RET_ReallyLR implicit $d0 401 %0:_(<4 x s16>) = COPY $d0 402 %1:_(<4 x s16>) = COPY $d1 403 %2:_(<4 x s16>) = COPY $d2 404 %3:_(<4 x s16>) = COPY $d3 405 %4:_(<4 x s1>) = G_ICMP intpred(eq), %0(<4 x s16>), %1 406 %5:_(<4 x s1>) = G_ICMP intpred(eq), %2(<4 x s16>), %3 407 %6:_(<4 x s1>) = G_ADD %4, %5 408 %7:_(<4 x s16>) = G_ANYEXT %6 409 $d0 = COPY %7:_(<4 x s16>) 410 RET_ReallyLR implicit $d0 411... 412--- 413name: add_v8s1 414tracksRegLiveness: true 415body: | 416 bb.1: 417 liveins: $d0, $d1, $d2, $d3 418 419 ; CHECK-LABEL: name: add_v8s1 420 ; CHECK: liveins: $d0, $d1, $d2, $d3 421 ; CHECK-NEXT: {{ $}} 422 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0 423 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1 424 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<8 x s8>) = COPY $d2 425 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<8 x s8>) = COPY $d3 426 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY]](<8 x s8>), [[COPY1]] 427 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY2]](<8 x s8>), [[COPY3]] 428 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s8>) = G_ADD [[ICMP]], [[ICMP1]] 429 ; CHECK-NEXT: $d0 = COPY [[ADD]](<8 x s8>) 430 ; CHECK-NEXT: RET_ReallyLR implicit $d0 431 %0:_(<8 x s8>) = COPY $d0 432 %1:_(<8 x s8>) = COPY $d1 433 %2:_(<8 x s8>) = COPY $d2 434 %3:_(<8 x s8>) = COPY $d3 435 %4:_(<8 x s1>) = G_ICMP intpred(eq), %0(<8 x s8>), %1 436 %5:_(<8 x s1>) = G_ICMP intpred(eq), %2(<8 x s8>), %3 437 %6:_(<8 x s1>) = G_ADD %4, %5 438 %7:_(<8 x s8>) = G_ANYEXT %6 439 $d0 = COPY %7:_(<8 x s8>) 440 RET_ReallyLR implicit $d0 441... 442--- 443name: add_v16s1 444tracksRegLiveness: true 445body: | 446 bb.1: 447 liveins: $q0, $q1, $q2, $q3 448 449 ; CHECK-LABEL: name: add_v16s1 450 ; CHECK: liveins: $q0, $q1, $q2, $q3 451 ; CHECK-NEXT: {{ $}} 452 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0 453 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1 454 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<16 x s8>) = COPY $q2 455 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<16 x s8>) = COPY $q3 456 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY]](<16 x s8>), [[COPY1]] 457 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY2]](<16 x s8>), [[COPY3]] 458 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[ICMP]], [[ICMP1]] 459 ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>) 460 ; CHECK-NEXT: RET_ReallyLR implicit $q0 461 %0:_(<16 x s8>) = COPY $q0 462 %1:_(<16 x s8>) = COPY $q1 463 %2:_(<16 x s8>) = COPY $q2 464 %3:_(<16 x s8>) = COPY $q3 465 %4:_(<16 x s1>) = G_ICMP intpred(eq), %0(<16 x s8>), %1 466 %5:_(<16 x s1>) = G_ICMP intpred(eq), %2(<16 x s8>), %3 467 %6:_(<16 x s1>) = G_ADD %4, %5 468 %7:_(<16 x s8>) = G_ANYEXT %6 469 $q0 = COPY %7:_(<16 x s8>) 470 RET_ReallyLR implicit $q0 471... 472