949 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=aarch64-unknown-unknown -verify-machineinstrs -global-isel-abort=0 -run-pass=legalizer %s -o - | FileCheck %s3---4name: legalize_phi5alignment: 46exposesReturnsTwice: false7legalized: false8regBankSelected: false9selected: false10tracksRegLiveness: true11registers:12 - { id: 0, class: _, preferred-register: '' }13 - { id: 1, class: _, preferred-register: '' }14 - { id: 2, class: _, preferred-register: '' }15 - { id: 3, class: _, preferred-register: '' }16 - { id: 4, class: _, preferred-register: '' }17 - { id: 5, class: _, preferred-register: '' }18 - { id: 6, class: _, preferred-register: '' }19 - { id: 7, class: _, preferred-register: '' }20 - { id: 8, class: _, preferred-register: '' }21 - { id: 9, class: _, preferred-register: '' }22 - { id: 10, class: _, preferred-register: '' }23liveins:24body: |25 ; CHECK-LABEL: name: legalize_phi26 ; CHECK: bb.0:27 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)28 ; CHECK-NEXT: liveins: $w029 ; CHECK-NEXT: {{ $}}30 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w031 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 032 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 133 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 234 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]35 ; CHECK-NEXT: G_BRCOND [[ICMP]](s32), %bb.136 ; CHECK-NEXT: G_BR %bb.237 ; CHECK-NEXT: {{ $}}38 ; CHECK-NEXT: bb.1:39 ; CHECK-NEXT: successors: %bb.3(0x80000000)40 ; CHECK-NEXT: {{ $}}41 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]42 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)43 ; CHECK-NEXT: G_BR %bb.344 ; CHECK-NEXT: {{ $}}45 ; CHECK-NEXT: bb.2:46 ; CHECK-NEXT: successors: %bb.3(0x80000000)47 ; CHECK-NEXT: {{ $}}48 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]49 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)50 ; CHECK-NEXT: {{ $}}51 ; CHECK-NEXT: bb.3:52 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC]](s16), %bb.1, [[TRUNC1]](s16), %bb.253 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)54 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 155 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]]56 ; CHECK-NEXT: $w0 = COPY [[AND]](s32)57 ; CHECK-NEXT: RET_ReallyLR implicit $w058 bb.0:59 ; Test that we insert legalization artifacts(Truncs here) into the correct BBs60 ; while legalizing the G_PHI to s16.61 62 63 successors: %bb.1(0x40000000), %bb.2(0x40000000)64 liveins: $w065 66 %0(s32) = COPY $w067 %1(s32) = G_CONSTANT i32 068 %3(s32) = G_CONSTANT i32 169 %6(s32) = G_CONSTANT i32 270 %2(s1) = G_ICMP intpred(ugt), %0(s32), %171 G_BRCOND %2(s1), %bb.172 G_BR %bb.273 74 bb.1:75 successors: %bb.3(0x80000000)76 77 %4(s32) = G_ADD %0, %378 %5(s1) = G_TRUNC %4(s32)79 G_BR %bb.380 81 bb.2:82 successors: %bb.3(0x80000000)83 84 %7(s32) = G_ADD %0, %685 %8(s1) = G_TRUNC %7(s32)86 87 bb.3:88 %9(s1) = G_PHI %5(s1), %bb.1, %8(s1), %bb.289 %11:_(s1) = G_PHI %5(s1), %bb.1, %8(s1), %bb.290 %10(s32) = G_ZEXT %9(s1)91 $w0 = COPY %10(s32)92 RET_ReallyLR implicit $w093 94...95---96name: legalize_phi_ptr97alignment: 498exposesReturnsTwice: false99legalized: false100regBankSelected: false101selected: false102tracksRegLiveness: true103registers:104 - { id: 0, class: _, preferred-register: '' }105 - { id: 1, class: _, preferred-register: '' }106 - { id: 2, class: _, preferred-register: '' }107 - { id: 3, class: _, preferred-register: '' }108 - { id: 4, class: _, preferred-register: '' }109 - { id: 5, class: _, preferred-register: '' }110liveins:111body: |112 ; CHECK-LABEL: name: legalize_phi_ptr113 ; CHECK: bb.0:114 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)115 ; CHECK-NEXT: liveins: $w2, $x0, $x1116 ; CHECK-NEXT: {{ $}}117 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0118 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1119 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2120 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1121 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]122 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.1123 ; CHECK-NEXT: G_BR %bb.2124 ; CHECK-NEXT: {{ $}}125 ; CHECK-NEXT: bb.1:126 ; CHECK-NEXT: successors: %bb.2(0x80000000)127 ; CHECK-NEXT: {{ $}}128 ; CHECK-NEXT: bb.2:129 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(p0) = G_PHI [[COPY]](p0), %bb.0, [[COPY1]](p0), %bb.1130 ; CHECK-NEXT: $x0 = COPY [[PHI]](p0)131 ; CHECK-NEXT: RET_ReallyLR implicit $x0132 bb.1:133 134 successors: %bb.2, %bb.3135 liveins: $w2, $x0, $x1136 137 %0(p0) = COPY $x0138 %1(p0) = COPY $x1139 %4(s32) = COPY $w2140 %2(s1) = G_TRUNC %4(s32)141 G_BRCOND %2(s1), %bb.2142 G_BR %bb.3143 144 bb.2:145 successors: %bb.3146 147 bb.3:148 %3(p0) = G_PHI %0(p0), %bb.1, %1(p0), %bb.2149 $x0 = COPY %3(p0)150 RET_ReallyLR implicit $x0151 152...153---154name: legalize_phi_empty155alignment: 4156exposesReturnsTwice: false157legalized: false158regBankSelected: false159selected: false160tracksRegLiveness: true161registers:162 - { id: 0, class: _, preferred-register: '' }163 - { id: 1, class: _, preferred-register: '' }164 - { id: 2, class: _, preferred-register: '' }165 - { id: 3, class: _, preferred-register: '' }166 - { id: 4, class: _, preferred-register: '' }167 - { id: 5, class: _, preferred-register: '' }168 - { id: 6, class: _, preferred-register: '' }169 - { id: 7, class: _, preferred-register: '' }170 - { id: 8, class: _, preferred-register: '' }171 - { id: 9, class: _, preferred-register: '' }172 - { id: 10, class: _, preferred-register: '' }173liveins:174body: |175 ; CHECK-LABEL: name: legalize_phi_empty176 ; CHECK: bb.0:177 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)178 ; CHECK-NEXT: liveins: $w0179 ; CHECK-NEXT: {{ $}}180 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0181 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0182 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3183 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1184 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]185 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]186 ; CHECK-NEXT: G_BRCOND [[ICMP]](s32), %bb.1187 ; CHECK-NEXT: G_BR %bb.2188 ; CHECK-NEXT: {{ $}}189 ; CHECK-NEXT: bb.1:190 ; CHECK-NEXT: successors: %bb.3(0x80000000)191 ; CHECK-NEXT: {{ $}}192 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]193 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)194 ; CHECK-NEXT: G_BR %bb.3195 ; CHECK-NEXT: {{ $}}196 ; CHECK-NEXT: bb.2:197 ; CHECK-NEXT: successors: %bb.3(0x80000000)198 ; CHECK-NEXT: {{ $}}199 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)200 ; CHECK-NEXT: {{ $}}201 ; CHECK-NEXT: bb.3:202 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC]](s16), %bb.1, [[TRUNC1]](s16), %bb.2203 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)204 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1205 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]]206 ; CHECK-NEXT: $w0 = COPY [[AND]](s32)207 ; CHECK-NEXT: RET_ReallyLR implicit $w0208 bb.0:209 successors: %bb.1(0x40000000), %bb.2(0x40000000)210 liveins: $w0211 ; Test that we properly legalize a phi with a predecessor that's empty212 213 214 215 216 %0(s32) = COPY $w0217 %1(s32) = G_CONSTANT i32 0218 %3(s32) = G_CONSTANT i32 3219 %6(s32) = G_CONSTANT i32 1220 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1221 %4(s32) = G_ADD %0, %3222 %5(s1) = G_TRUNC %4(s32)223 G_BRCOND %2(s1), %bb.1224 G_BR %bb.2225 226 bb.1:227 successors: %bb.3(0x80000000)228 229 %7(s32) = G_ADD %0, %6230 %8(s1) = G_TRUNC %7(s32)231 G_BR %bb.3232 233 bb.2:234 successors: %bb.3(0x80000000)235 236 237 bb.3:238 %9(s1) = G_PHI %8(s1), %bb.1, %5(s1), %bb.2239 %10(s32) = G_ZEXT %9(s1)240 $w0 = COPY %10(s32)241 RET_ReallyLR implicit $w0242 243...244---245name: legalize_phi_loop246alignment: 4247exposesReturnsTwice: false248legalized: false249regBankSelected: false250selected: false251tracksRegLiveness: true252registers:253 - { id: 0, class: _, preferred-register: '' }254 - { id: 1, class: _, preferred-register: '' }255 - { id: 2, class: _, preferred-register: '' }256 - { id: 3, class: _, preferred-register: '' }257 - { id: 4, class: _, preferred-register: '' }258 - { id: 5, class: _, preferred-register: '' }259 - { id: 6, class: _, preferred-register: '' }260 - { id: 7, class: _, preferred-register: '' }261liveins:262body: |263 ; CHECK-LABEL: name: legalize_phi_loop264 ; CHECK: bb.0:265 ; CHECK-NEXT: successors: %bb.1(0x80000000)266 ; CHECK-NEXT: liveins: $w0267 ; CHECK-NEXT: {{ $}}268 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0269 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0270 ; CHECK-NEXT: {{ $}}271 ; CHECK-NEXT: bb.1:272 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)273 ; CHECK-NEXT: {{ $}}274 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[C]](s16), %bb.0, %14(s16), %bb.1275 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)276 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1277 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ANYEXT]], [[C1]]278 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255279 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C2]]280 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]]281 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)282 ; CHECK-NEXT: G_BRCOND [[ICMP]](s32), %bb.1283 ; CHECK-NEXT: {{ $}}284 ; CHECK-NEXT: bb.2:285 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255286 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C3]]287 ; CHECK-NEXT: $w0 = COPY [[AND1]](s32)288 ; CHECK-NEXT: RET_ReallyLR implicit $w0289 bb.0:290 successors: %bb.1(0x80000000)291 liveins: $w0292 ; Test that we properly legalize a phi that uses a value from the same BB293 294 %0(s32) = COPY $w0295 %2(s8) = G_CONSTANT i8 1296 %7(s8) = G_CONSTANT i8 0297 298 bb.1:299 successors: %bb.1(0x40000000), %bb.3(0x40000000)300 301 %1(s8) = G_PHI %7(s8), %bb.0, %3(s8), %bb.1302 %3(s8) = G_ADD %1, %2303 %4(s32) = G_ZEXT %3(s8)304 %5(s1) = G_ICMP intpred(ugt), %4(s32), %0305 G_BRCOND %5(s1), %bb.1306 307 bb.3:308 %6(s32) = G_ZEXT %3(s8)309 $w0 = COPY %6(s32)310 RET_ReallyLR implicit $w0311 312...313---314name: legalize_phi_cycle315alignment: 4316exposesReturnsTwice: false317legalized: false318regBankSelected: false319selected: false320tracksRegLiveness: true321registers:322 - { id: 0, class: _, preferred-register: '' }323 - { id: 1, class: _, preferred-register: '' }324 - { id: 2, class: _, preferred-register: '' }325 - { id: 3, class: _, preferred-register: '' }326 - { id: 4, class: _, preferred-register: '' }327liveins:328body: |329 ; CHECK-LABEL: name: legalize_phi_cycle330 ; CHECK: bb.0:331 ; CHECK-NEXT: successors: %bb.1(0x80000000)332 ; CHECK-NEXT: liveins: $w0333 ; CHECK-NEXT: {{ $}}334 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0335 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0336 ; CHECK-NEXT: {{ $}}337 ; CHECK-NEXT: bb.1:338 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)339 ; CHECK-NEXT: {{ $}}340 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[C]](s16), %bb.0, [[PHI]](s16), %bb.1341 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)342 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255343 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C1]]344 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]]345 ; CHECK-NEXT: G_BRCOND [[ICMP]](s32), %bb.1346 ; CHECK-NEXT: {{ $}}347 ; CHECK-NEXT: bb.2:348 ; CHECK-NEXT: $w0 = COPY [[AND]](s32)349 ; CHECK-NEXT: RET_ReallyLR implicit $w0350 bb.0:351 successors: %bb.1(0x80000000)352 liveins: $w0353 ; Test that we properly legalize a phi that uses itself354 355 356 %0(s32) = COPY $w0357 %4(s8) = G_CONSTANT i8 0358 359 bb.1:360 successors: %bb.1(0x40000000), %bb.3(0x40000000)361 362 %1(s8) = G_PHI %4(s8), %bb.0, %1(s8), %bb.1363 %2(s32) = G_ZEXT %1(s8)364 %3(s1) = G_ICMP intpred(ugt), %2(s32), %0365 G_BRCOND %3(s1), %bb.1366 367 bb.3:368 $w0 = COPY %2(s32)369 RET_ReallyLR implicit $w0370 371...372---373name: legalize_phi_same_bb374alignment: 4375exposesReturnsTwice: false376legalized: false377regBankSelected: false378selected: false379tracksRegLiveness: true380registers:381 - { id: 0, class: _, preferred-register: '' }382 - { id: 1, class: _, preferred-register: '' }383 - { id: 2, class: _, preferred-register: '' }384 - { id: 3, class: _, preferred-register: '' }385 - { id: 4, class: _, preferred-register: '' }386 - { id: 5, class: _, preferred-register: '' }387 - { id: 6, class: _, preferred-register: '' }388 - { id: 7, class: _, preferred-register: '' }389 - { id: 8, class: _, preferred-register: '' }390 - { id: 9, class: _, preferred-register: '' }391 - { id: 10, class: _, preferred-register: '' }392 - { id: 11, class: _, preferred-register: '' }393 - { id: 12, class: _, preferred-register: '' }394 - { id: 13, class: _, preferred-register: '' }395 - { id: 14, class: _, preferred-register: '' }396liveins:397body: |398 ; CHECK-LABEL: name: legalize_phi_same_bb399 ; CHECK: bb.0:400 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)401 ; CHECK-NEXT: liveins: $w0402 ; CHECK-NEXT: {{ $}}403 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0404 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0405 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3406 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1407 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]408 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]409 ; CHECK-NEXT: G_BRCOND [[ICMP]](s32), %bb.1410 ; CHECK-NEXT: G_BR %bb.2411 ; CHECK-NEXT: {{ $}}412 ; CHECK-NEXT: bb.1:413 ; CHECK-NEXT: successors: %bb.3(0x80000000)414 ; CHECK-NEXT: {{ $}}415 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]416 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)417 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)418 ; CHECK-NEXT: G_BR %bb.3419 ; CHECK-NEXT: {{ $}}420 ; CHECK-NEXT: bb.2:421 ; CHECK-NEXT: successors: %bb.3(0x80000000)422 ; CHECK-NEXT: {{ $}}423 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 42424 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)425 ; CHECK-NEXT: {{ $}}426 ; CHECK-NEXT: bb.3:427 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC2]](s16), %bb.2428 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[TRUNC]](s16), %bb.1, [[C3]](s16), %bb.2429 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)430 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 255431 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C4]]432 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16)433 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C4]]434 ; CHECK-NEXT: [[ADD2:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[AND1]]435 ; CHECK-NEXT: $w0 = COPY [[ADD2]](s32)436 ; CHECK-NEXT: RET_ReallyLR implicit $w0437 bb.0:438 successors: %bb.1(0x40000000), %bb.2(0x40000000)439 liveins: $w0440 ; Make sure that we correctly insert the new legalized G_PHI at the441 ; correct location (ie make sure G_PHIs are the first insts in the BB).442 443 444 445 446 %0(s32) = COPY $w0447 %1(s32) = G_CONSTANT i32 0448 %3(s32) = G_CONSTANT i32 3449 %6(s32) = G_CONSTANT i32 1450 %14(s8) = G_CONSTANT i8 42451 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1452 %4(s32) = G_ADD %0, %3453 %5(s8) = G_TRUNC %4(s32)454 G_BRCOND %2(s1), %bb.1455 G_BR %bb.2456 457 bb.1:458 successors: %bb.3(0x80000000)459 460 %7(s32) = G_ADD %0, %6461 %8(s8) = G_TRUNC %7(s32)462 G_BR %bb.3463 464 bb.2:465 successors: %bb.3(0x80000000)466 467 468 bb.3:469 %9(s8) = G_PHI %8(s8), %bb.1, %5(s8), %bb.2470 %10(s8) = G_PHI %8(s8), %bb.1, %14(s8), %bb.2471 %11(s32) = G_ZEXT %9(s8)472 %12(s32) = G_ZEXT %10(s8)473 %13(s32) = G_ADD %11, %12474 $w0 = COPY %13(s32)475 RET_ReallyLR implicit $w0476 477...478---479name: legalize_phi_diff_bb480alignment: 4481exposesReturnsTwice: false482legalized: false483regBankSelected: false484selected: false485tracksRegLiveness: true486registers:487 - { id: 0, class: _, preferred-register: '' }488 - { id: 1, class: _, preferred-register: '' }489 - { id: 2, class: _, preferred-register: '' }490 - { id: 3, class: _, preferred-register: '' }491 - { id: 4, class: _, preferred-register: '' }492 - { id: 5, class: _, preferred-register: '' }493 - { id: 6, class: _, preferred-register: '' }494 - { id: 7, class: _, preferred-register: '' }495 - { id: 8, class: _, preferred-register: '' }496 - { id: 9, class: _, preferred-register: '' }497 - { id: 10, class: _, preferred-register: '' }498 - { id: 11, class: _, preferred-register: '' }499 - { id: 12, class: _, preferred-register: '' }500 - { id: 13, class: _, preferred-register: '' }501 - { id: 14, class: _, preferred-register: '' }502 - { id: 15, class: _, preferred-register: '' }503liveins:504body: |505 ; CHECK-LABEL: name: legalize_phi_diff_bb506 ; CHECK: bb.0:507 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)508 ; CHECK-NEXT: liveins: $w0, $w1509 ; CHECK-NEXT: {{ $}}510 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0511 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1512 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0513 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3514 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1515 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 44516 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]517 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]518 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)519 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)520 ; CHECK-NEXT: G_BRCOND [[ICMP]](s32), %bb.1521 ; CHECK-NEXT: G_BR %bb.2522 ; CHECK-NEXT: {{ $}}523 ; CHECK-NEXT: bb.1:524 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)525 ; CHECK-NEXT: {{ $}}526 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.0, %22(s16), %bb.1527 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)528 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 255529 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C4]]530 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[C2]]531 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[ADD1]](s32), [[C3]]532 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 43533 ; CHECK-NEXT: G_BRCOND [[ICMP1]](s32), %bb.2534 ; CHECK-NEXT: G_BR %bb.1535 ; CHECK-NEXT: {{ $}}536 ; CHECK-NEXT: bb.2:537 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[PHI]](s16), %bb.1, [[TRUNC]](s16), %bb.0538 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16)539 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 255540 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C6]]541 ; CHECK-NEXT: $w0 = COPY [[AND1]](s32)542 ; CHECK-NEXT: RET_ReallyLR implicit $w0543 bb.0:544 successors: %bb.1(0x40000000), %bb.3(0x40000000)545 liveins: $w0, $w1546 ; Make sure that we correctly legalize PHIs sharing common defs547 ; in different BBs.548 549 550 551 %0(s32) = COPY $w0552 %1(s32) = COPY $w1553 %2(s32) = G_CONSTANT i32 0554 %4(s32) = G_CONSTANT i32 3555 %9(s32) = G_CONSTANT i32 1556 %11(s32) = G_CONSTANT i32 44557 %15(s8) = G_CONSTANT i8 43558 %3(s1) = G_ICMP intpred(ugt), %0(s32), %2559 %5(s32) = G_ADD %0, %4560 %6(s8) = G_TRUNC %5(s32)561 G_BRCOND %3(s1), %bb.1562 G_BR %bb.3563 564 bb.1:565 successors: %bb.3(0x40000000), %bb.1(0x40000000)566 567 %7(s8) = G_PHI %6(s8), %bb.0, %15(s8), %bb.1568 %8(s32) = G_ZEXT %7(s8)569 %10(s32) = G_ADD %8, %9570 %12(s1) = G_ICMP intpred(ugt), %10(s32), %11571 G_BRCOND %12(s1), %bb.3572 G_BR %bb.1573 574 bb.3:575 %13(s8) = G_PHI %7(s8), %bb.1, %6(s8), %bb.0576 %14(s32) = G_ZEXT %13(s8)577 $w0 = COPY %14(s32)578 RET_ReallyLR implicit $w0579 580...581---582name: legalize_phi_check_insertpt583alignment: 4584exposesReturnsTwice: false585legalized: false586regBankSelected: false587selected: false588tracksRegLiveness: true589body: |590 ; CHECK-LABEL: name: legalize_phi_check_insertpt591 ; CHECK: bb.0:592 ; CHECK-NEXT: successors: %bb.1(0x80000000)593 ; CHECK-NEXT: liveins: $x0, $x1594 ; CHECK-NEXT: {{ $}}595 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0596 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1597 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF598 ; CHECK-NEXT: G_BR %bb.1599 ; CHECK-NEXT: {{ $}}600 ; CHECK-NEXT: bb.1:601 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s64) = G_PHI [[DEF]](s64), %bb.0602 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:_(s64) = G_PHI [[DEF]](s64), %bb.0603 ; CHECK-NEXT: [[PHI2:%[0-9]+]]:_(s64) = G_PHI [[COPY]](s64), %bb.0604 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[PHI]](s64), [[PHI1]](s64)605 ; CHECK-NEXT: G_STORE [[MV]](s128), [[COPY1]](p0) :: (store (s128))606 ; CHECK-NEXT: G_STORE [[PHI2]](s64), [[COPY1]](p0) :: (store (s64))607 ; CHECK-NEXT: RET_ReallyLR608 ; Check that the G_MERGE here gets inserted after all the PHIs.609 bb.0:610 successors: %bb.1(0x40000000)611 liveins: $x0, $x1612 613 %0:_(s64) = COPY $x0614 %1:_(p0) = COPY $x1615 %2:_(s128) = G_IMPLICIT_DEF616 G_BR %bb.1617 618 bb.1:619 %3:_(s128) = G_PHI %2(s128), %bb.0620 %4:_(s64) = G_PHI %0(s64), %bb.0621 G_STORE %3(s128), %1(p0) :: (store (s128))622 G_STORE %4(s64), %1(p0) :: (store (s64))623 RET_ReallyLR624 625...626---627name: legalize_phi_vector628tracksRegLiveness: true629body: |630 ; CHECK-LABEL: name: legalize_phi_vector631 ; CHECK: bb.0:632 ; CHECK-NEXT: successors: %bb.1(0x80000000)633 ; CHECK-NEXT: liveins: $q0, $x1634 ; CHECK-NEXT: {{ $}}635 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0636 ; CHECK-NEXT: G_BR %bb.1637 ; CHECK-NEXT: {{ $}}638 ; CHECK-NEXT: bb.1:639 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(<16 x s8>) = G_PHI [[COPY]](<16 x s8>), %bb.0640 ; CHECK-NEXT: $q0 = COPY [[PHI]](<16 x s8>)641 ; CHECK-NEXT: RET_ReallyLR642 bb.0:643 successors: %bb.1644 liveins: $q0, $x1645 646 %0:_(<16 x s8>) = COPY $q0647 G_BR %bb.1648 649 bb.1:650 %3:_(<16 x s8>) = G_PHI %0(<16 x s8>), %bb.0651 $q0 = COPY %3(<16 x s8>)652 RET_ReallyLR653...654---655name: s88656tracksRegLiveness: true657liveins:658body: |659 ; CHECK-LABEL: name: s88660 ; CHECK: bb.0:661 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)662 ; CHECK-NEXT: liveins: $x0663 ; CHECK-NEXT: {{ $}}664 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF665 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1666 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]]667 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.1668 ; CHECK-NEXT: G_BR %bb.2669 ; CHECK-NEXT: {{ $}}670 ; CHECK-NEXT: bb.1:671 ; CHECK-NEXT: successors: %bb.3(0x80000000)672 ; CHECK-NEXT: {{ $}}673 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF674 ; CHECK-NEXT: G_BR %bb.3675 ; CHECK-NEXT: {{ $}}676 ; CHECK-NEXT: bb.2:677 ; CHECK-NEXT: successors: %bb.3(0x80000000)678 ; CHECK-NEXT: {{ $}}679 ; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF680 ; CHECK-NEXT: {{ $}}681 ; CHECK-NEXT: bb.3:682 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s64) = G_PHI [[DEF1]](s64), %bb.1, [[DEF2]](s64), %bb.2683 ; CHECK-NEXT: $x0 = COPY [[PHI]](s64)684 ; CHECK-NEXT: RET_ReallyLR implicit $x0685 bb.0:686 successors: %bb.1(0x40000000), %bb.2(0x40000000)687 liveins: $x0688 %cond:_(s1) = G_IMPLICIT_DEF689 G_BRCOND %cond(s1), %bb.1690 G_BR %bb.2691 bb.1:692 successors: %bb.3(0x80000000)693 %imp_1:_(s88) = G_IMPLICIT_DEF694 G_BR %bb.3695 bb.2:696 successors: %bb.3(0x80000000)697 %imp_2:_(s88) = G_IMPLICIT_DEF698 bb.3:699 %phi:_(s88) = G_PHI %imp_1:_(s88), %bb.1, %imp_2:_(s88), %bb.2700 %trunc:_(s64) = G_TRUNC %phi701 $x0 = COPY %trunc702 RET_ReallyLR implicit $x0703...704---705name: v4s64706alignment: 4707tracksRegLiveness: true708body: |709 ; CHECK-LABEL: name: v4s64710 ; CHECK: bb.0:711 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.2(0x30000000)712 ; CHECK-NEXT: liveins: $x0, $x1713 ; CHECK-NEXT: {{ $}}714 ; CHECK-NEXT: %ptr1:_(p0) = COPY $x1715 ; CHECK-NEXT: %ptr2:_(p0) = COPY $x0716 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s64>) = G_LOAD %ptr1(p0) :: (load (<2 x s64>), align 32)717 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16718 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr1, [[C]](s64)719 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[PTR_ADD]](p0) :: (load (<2 x s64>) from unknown-address + 16)720 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF721 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1722 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C1]]723 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.2724 ; CHECK-NEXT: G_BR %bb.1725 ; CHECK-NEXT: {{ $}}726 ; CHECK-NEXT: bb.1:727 ; CHECK-NEXT: successors: %bb.2(0x80000000)728 ; CHECK-NEXT: {{ $}}729 ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:_(<2 x s64>) = G_LOAD %ptr2(p0) :: (load (<2 x s64>), align 32)730 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16731 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr2, [[C2]](s64)732 ; CHECK-NEXT: [[LOAD3:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[PTR_ADD1]](p0) :: (load (<2 x s64>) from unknown-address + 16)733 ; CHECK-NEXT: {{ $}}734 ; CHECK-NEXT: bb.2:735 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(<2 x s64>) = G_PHI [[LOAD2]](<2 x s64>), %bb.1, [[LOAD]](<2 x s64>), %bb.0736 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:_(<2 x s64>) = G_PHI [[LOAD3]](<2 x s64>), %bb.1, [[LOAD1]](<2 x s64>), %bb.0737 ; CHECK-NEXT: $q0 = COPY [[PHI]](<2 x s64>)738 ; CHECK-NEXT: $q1 = COPY [[PHI1]](<2 x s64>)739 ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1740 bb.0:741 successors: %bb.1(0x50000000), %bb.2(0x30000000)742 liveins: $x0, $x1743 744 %ptr1:_(p0) = COPY $x1745 %ptr2:_(p0) = COPY $x0746 %cond:_(s1) = G_IMPLICIT_DEF747 %val_1:_(<4 x s64>) = G_LOAD %ptr1(p0) :: (load (<4 x s64>))748 G_BRCOND %cond(s1), %bb.2749 G_BR %bb.1750 bb.1:751 %val_2:_(<4 x s64>) = G_LOAD %ptr2(p0) :: (load (<4 x s64>))752 bb.2:753 %phi:_(<4 x s64>) = G_PHI %val_2(<4 x s64>), %bb.1, %val_1(<4 x s64>), %bb.0754 %unmerge_1:_(<2 x s64>), %unmerge_2:_(<2 x s64>) = G_UNMERGE_VALUES %phi(<4 x s64>)755 $q0 = COPY %unmerge_1(<2 x s64>)756 $q1 = COPY %unmerge_2(<2 x s64>)757 RET_ReallyLR implicit $q0, implicit $q1758...759---760name: v8s32761alignment: 4762tracksRegLiveness: true763body: |764 ; CHECK-LABEL: name: v8s32765 ; CHECK: bb.0:766 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.2(0x30000000)767 ; CHECK-NEXT: liveins: $x0, $x1768 ; CHECK-NEXT: {{ $}}769 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF770 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF771 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1772 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[DEF1]], [[C]]773 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.2774 ; CHECK-NEXT: G_BR %bb.1775 ; CHECK-NEXT: {{ $}}776 ; CHECK-NEXT: bb.1:777 ; CHECK-NEXT: successors: %bb.2(0x80000000)778 ; CHECK-NEXT: {{ $}}779 ; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF780 ; CHECK-NEXT: {{ $}}781 ; CHECK-NEXT: bb.2:782 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(<4 x s32>) = G_PHI [[DEF2]](<4 x s32>), %bb.1, [[DEF]](<4 x s32>), %bb.0783 ; CHECK-NEXT: %one:_(s64) = G_CONSTANT i64 1784 ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT_VECTOR_ELT [[PHI]](<4 x s32>), %one(s64)785 ; CHECK-NEXT: $w0 = COPY %extract(s32)786 ; CHECK-NEXT: RET_ReallyLR implicit $w0787 bb.0:788 successors: %bb.1(0x50000000), %bb.2(0x30000000)789 liveins: $x0, $x1790 %cond:_(s1) = G_IMPLICIT_DEF791 %val_1:_(<8 x s32>) = G_IMPLICIT_DEF792 G_BRCOND %cond(s1), %bb.2793 G_BR %bb.1794 bb.1:795 %val_2:_(<8 x s32>) = G_IMPLICIT_DEF796 bb.2:797 %phi:_(<8 x s32>) = G_PHI %val_2(<8 x s32>), %bb.1, %val_1(<8 x s32>), %bb.0798 %one:_(s64) = G_CONSTANT i64 1799 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %phi(<8 x s32>), %one(s64)800 $w0 = COPY %extract801 RET_ReallyLR implicit $w0802...803---804name: v16s16805alignment: 4806tracksRegLiveness: true807body: |808 ; CHECK-LABEL: name: v16s16809 ; CHECK: bb.0:810 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.2(0x30000000)811 ; CHECK-NEXT: liveins: $x0, $x1812 ; CHECK-NEXT: {{ $}}813 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<8 x s16>) = G_IMPLICIT_DEF814 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF815 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1816 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[DEF1]], [[C]]817 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.2818 ; CHECK-NEXT: G_BR %bb.1819 ; CHECK-NEXT: {{ $}}820 ; CHECK-NEXT: bb.1:821 ; CHECK-NEXT: successors: %bb.2(0x80000000)822 ; CHECK-NEXT: {{ $}}823 ; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(<8 x s16>) = G_IMPLICIT_DEF824 ; CHECK-NEXT: {{ $}}825 ; CHECK-NEXT: bb.2:826 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(<8 x s16>) = G_PHI [[DEF2]](<8 x s16>), %bb.1, [[DEF]](<8 x s16>), %bb.0827 ; CHECK-NEXT: %one:_(s64) = G_CONSTANT i64 1828 ; CHECK-NEXT: %extract:_(s16) = G_EXTRACT_VECTOR_ELT [[PHI]](<8 x s16>), %one(s64)829 ; CHECK-NEXT: $h0 = COPY %extract(s16)830 ; CHECK-NEXT: RET_ReallyLR implicit $h0831 bb.0:832 successors: %bb.1(0x50000000), %bb.2(0x30000000)833 liveins: $x0, $x1834 %cond:_(s1) = G_IMPLICIT_DEF835 %val_1:_(<16 x s16>) = G_IMPLICIT_DEF836 G_BRCOND %cond(s1), %bb.2837 G_BR %bb.1838 bb.1:839 %val_2:_(<16 x s16>) = G_IMPLICIT_DEF840 bb.2:841 %phi:_(<16 x s16>) = G_PHI %val_2(<16 x s16>), %bb.1, %val_1(<16 x s16>), %bb.0842 %one:_(s64) = G_CONSTANT i64 1843 %extract:_(s16) = G_EXTRACT_VECTOR_ELT %phi(<16 x s16>), %one(s64)844 $h0 = COPY %extract845 RET_ReallyLR implicit $h0846...847---848name: v32s8849alignment: 4850tracksRegLiveness: true851body: |852 ; CHECK-LABEL: name: v32s8853 ; CHECK: bb.0:854 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.2(0x30000000)855 ; CHECK-NEXT: liveins: $x0, $x1856 ; CHECK-NEXT: {{ $}}857 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<16 x s8>) = G_IMPLICIT_DEF858 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF859 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1860 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[DEF1]], [[C]]861 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.2862 ; CHECK-NEXT: G_BR %bb.1863 ; CHECK-NEXT: {{ $}}864 ; CHECK-NEXT: bb.1:865 ; CHECK-NEXT: successors: %bb.2(0x80000000)866 ; CHECK-NEXT: {{ $}}867 ; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(<16 x s8>) = G_IMPLICIT_DEF868 ; CHECK-NEXT: {{ $}}869 ; CHECK-NEXT: bb.2:870 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(<16 x s8>) = G_PHI [[DEF2]](<16 x s8>), %bb.1, [[DEF]](<16 x s8>), %bb.0871 ; CHECK-NEXT: %one:_(s64) = G_CONSTANT i64 1872 ; CHECK-NEXT: %extract:_(s8) = G_EXTRACT_VECTOR_ELT [[PHI]](<16 x s8>), %one(s64)873 ; CHECK-NEXT: $b0 = COPY %extract(s8)874 ; CHECK-NEXT: RET_ReallyLR implicit $b0875 bb.0:876 successors: %bb.1(0x50000000), %bb.2(0x30000000)877 liveins: $x0, $x1878 %cond:_(s1) = G_IMPLICIT_DEF879 %val_1:_(<32 x s8>) = G_IMPLICIT_DEF880 G_BRCOND %cond(s1), %bb.2881 G_BR %bb.1882 bb.1:883 %val_2:_(<32 x s8>) = G_IMPLICIT_DEF884 bb.2:885 %phi:_(<32 x s8>) = G_PHI %val_2(<32 x s8>), %bb.1, %val_1(<32 x s8>), %bb.0886 %one:_(s64) = G_CONSTANT i64 1887 %extract:_(s8) = G_EXTRACT_VECTOR_ELT %phi(<32 x s8>), %one(s64)888 $b0 = COPY %extract889 RET_ReallyLR implicit $b0890...891---892name: v4p0893alignment: 4894tracksRegLiveness: true895body: |896 ; CHECK-LABEL: name: v4p0897 ; CHECK: bb.0:898 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.2(0x30000000)899 ; CHECK-NEXT: liveins: $x0, $x1900 ; CHECK-NEXT: {{ $}}901 ; CHECK-NEXT: %ptr1:_(p0) = COPY $x1902 ; CHECK-NEXT: %ptr2:_(p0) = COPY $x0903 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s64>) = G_LOAD %ptr1(p0) :: (load (<2 x s64>), align 32)904 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x p0>) = G_BITCAST [[LOAD]](<2 x s64>)905 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16906 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr1, [[C]](s64)907 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[PTR_ADD]](p0) :: (load (<2 x s64>) from unknown-address + 16)908 ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x p0>) = G_BITCAST [[LOAD1]](<2 x s64>)909 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF910 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1911 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C1]]912 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.2913 ; CHECK-NEXT: G_BR %bb.1914 ; CHECK-NEXT: {{ $}}915 ; CHECK-NEXT: bb.1:916 ; CHECK-NEXT: successors: %bb.2(0x80000000)917 ; CHECK-NEXT: {{ $}}918 ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:_(<2 x s64>) = G_LOAD %ptr2(p0) :: (load (<2 x s64>), align 32)919 ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(<2 x p0>) = G_BITCAST [[LOAD2]](<2 x s64>)920 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16921 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr2, [[C2]](s64)922 ; CHECK-NEXT: [[LOAD3:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[PTR_ADD1]](p0) :: (load (<2 x s64>) from unknown-address + 16)923 ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(<2 x p0>) = G_BITCAST [[LOAD3]](<2 x s64>)924 ; CHECK-NEXT: {{ $}}925 ; CHECK-NEXT: bb.2:926 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(<2 x p0>) = G_PHI [[BITCAST2]](<2 x p0>), %bb.1, [[BITCAST]](<2 x p0>), %bb.0927 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:_(<2 x p0>) = G_PHI [[BITCAST3]](<2 x p0>), %bb.1, [[BITCAST1]](<2 x p0>), %bb.0928 ; CHECK-NEXT: $q0 = COPY [[PHI]](<2 x p0>)929 ; CHECK-NEXT: $q1 = COPY [[PHI1]](<2 x p0>)930 ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1931 bb.0:932 successors: %bb.1(0x50000000), %bb.2(0x30000000)933 liveins: $x0, $x1934 935 %ptr1:_(p0) = COPY $x1936 %ptr2:_(p0) = COPY $x0937 %cond:_(s1) = G_IMPLICIT_DEF938 %val_1:_(<4 x p0>) = G_LOAD %ptr1(p0) :: (load (<4 x p0>))939 G_BRCOND %cond(s1), %bb.2940 G_BR %bb.1941 bb.1:942 %val_2:_(<4 x p0>) = G_LOAD %ptr2(p0) :: (load (<4 x p0>))943 bb.2:944 %phi:_(<4 x p0>) = G_PHI %val_2(<4 x p0>), %bb.1, %val_1(<4 x p0>), %bb.0945 %unmerge_1:_(<2 x p0>), %unmerge_2:_(<2 x p0>) = G_UNMERGE_VALUES %phi(<4 x p0>)946 $q0 = COPY %unmerge_1(<2 x p0>)947 $q1 = COPY %unmerge_2(<2 x p0>)948 RET_ReallyLR implicit $q0, implicit $q1949