brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.3 KiB · 6b8410a Raw
556 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64-apple-darwin -debugify-and-strip-all-safe -run-pass=aarch64-prelegalizer-combiner -global-isel -verify-machineinstrs %s -o - | FileCheck %s3 4# Check that we propagate the G_SEXT to the sources of the phi operand.5---6name:            sext_icst_through_phi7tracksRegLiveness: true8body:             |9  ; CHECK-LABEL: name: sext_icst_through_phi10  ; CHECK: bb.0.entry:11  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)12  ; CHECK-NEXT:   liveins: $w0, $w113  ; CHECK-NEXT: {{  $}}14  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w015  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 216  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one17  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.218  ; CHECK-NEXT:   G_BR %bb.119  ; CHECK-NEXT: {{  $}}20  ; CHECK-NEXT: bb.1:21  ; CHECK-NEXT:   successors: %bb.3(0x80000000)22  ; CHECK-NEXT: {{  $}}23  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 424  ; CHECK-NEXT:   G_BR %bb.325  ; CHECK-NEXT: {{  $}}26  ; CHECK-NEXT: bb.2:27  ; CHECK-NEXT:   successors: %bb.3(0x80000000)28  ; CHECK-NEXT: {{  $}}29  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1030  ; CHECK-NEXT: {{  $}}31  ; CHECK-NEXT: bb.3:32  ; CHECK-NEXT:   %ext:_(s64) = G_PHI [[C]](s64), %bb.1, [[C1]](s64), %bb.233  ; CHECK-NEXT:   $x0 = COPY %ext(s64)34  ; CHECK-NEXT:   RET_ReallyLR implicit $x035  bb.1.entry:36    liveins: $w0, $w137 38    %0:_(s32) = COPY $w039    %1:_(s32) = COPY $w140    %zero:_(s32) = G_CONSTANT i32 041    %one:_(s32) = G_CONSTANT i32 242    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one43    G_BRCOND %cmp(s1), %bb.244    G_BR %bb.345 46  bb.2:47    %cst32_4:_(s32) = G_CONSTANT i32 448    G_BR %bb.449 50  bb.3:51    %cst32_10:_(s32) = G_CONSTANT i32 1052 53  bb.4:54    %phi:_(s32) = G_PHI %cst32_4(s32), %bb.2, %cst32_10(s32), %bb.355    %ext:_(s64) = G_SEXT %phi56    $x0 = COPY %ext(s64)57    RET_ReallyLR implicit $x058 59...60 61# Check that we propagate the G_ZEXT to the sources of the phi operand.62---63name:            zext_icst_through_phi64tracksRegLiveness: true65body:             |66  ; CHECK-LABEL: name: zext_icst_through_phi67  ; CHECK: bb.0.entry:68  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)69  ; CHECK-NEXT:   liveins: $w0, $w170  ; CHECK-NEXT: {{  $}}71  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w072  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 273  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one74  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.275  ; CHECK-NEXT:   G_BR %bb.176  ; CHECK-NEXT: {{  $}}77  ; CHECK-NEXT: bb.1:78  ; CHECK-NEXT:   successors: %bb.3(0x80000000)79  ; CHECK-NEXT: {{  $}}80  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 481  ; CHECK-NEXT:   G_BR %bb.382  ; CHECK-NEXT: {{  $}}83  ; CHECK-NEXT: bb.2:84  ; CHECK-NEXT:   successors: %bb.3(0x80000000)85  ; CHECK-NEXT: {{  $}}86  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1087  ; CHECK-NEXT: {{  $}}88  ; CHECK-NEXT: bb.3:89  ; CHECK-NEXT:   %ext:_(s64) = G_PHI [[C]](s64), %bb.1, [[C1]](s64), %bb.290  ; CHECK-NEXT:   $x0 = COPY %ext(s64)91  ; CHECK-NEXT:   RET_ReallyLR implicit $x092  bb.1.entry:93    liveins: $w0, $w194 95    %0:_(s32) = COPY $w096    %1:_(s32) = COPY $w197    %zero:_(s32) = G_CONSTANT i32 098    %one:_(s32) = G_CONSTANT i32 299    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one100    G_BRCOND %cmp(s1), %bb.2101    G_BR %bb.3102 103  bb.2:104    %cst32_4:_(s32) = G_CONSTANT i32 4105    G_BR %bb.4106 107  bb.3:108    %cst32_10:_(s32) = G_CONSTANT i32 10109 110  bb.4:111    %phi:_(s32) = G_PHI %cst32_4(s32), %bb.2, %cst32_10(s32), %bb.3112    %ext:_(s64) = G_ZEXT %phi113    $x0 = COPY %ext(s64)114    RET_ReallyLR implicit $x0115 116...117 118# Don't handle vectors because of potential cost issues.119---120name:            sext_load_through_phi_vector121tracksRegLiveness: true122body:             |123  ; CHECK-LABEL: name: sext_load_through_phi_vector124  ; CHECK: bb.0.entry:125  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)126  ; CHECK-NEXT:   liveins: $x0, $q0, $q1127  ; CHECK-NEXT: {{  $}}128  ; CHECK-NEXT:   %ptr:_(p0) = COPY $x0129  ; CHECK-NEXT:   %cmp:_(s1) = G_IMPLICIT_DEF130  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.2131  ; CHECK-NEXT:   G_BR %bb.1132  ; CHECK-NEXT: {{  $}}133  ; CHECK-NEXT: bb.1:134  ; CHECK-NEXT:   successors: %bb.3(0x80000000)135  ; CHECK-NEXT: {{  $}}136  ; CHECK-NEXT:   %ld1:_(<4 x s32>) = G_LOAD %ptr(p0) :: (load (<4 x s32>))137  ; CHECK-NEXT:   G_BR %bb.3138  ; CHECK-NEXT: {{  $}}139  ; CHECK-NEXT: bb.2:140  ; CHECK-NEXT:   successors: %bb.3(0x80000000)141  ; CHECK-NEXT: {{  $}}142  ; CHECK-NEXT:   %ld2:_(<4 x s32>) = G_LOAD %ptr(p0) :: (load (<4 x s32>))143  ; CHECK-NEXT: {{  $}}144  ; CHECK-NEXT: bb.3:145  ; CHECK-NEXT:   %phi:_(<4 x s32>) = G_PHI %ld1(<4 x s32>), %bb.1, %ld2(<4 x s32>), %bb.2146  ; CHECK-NEXT:   %ext:_(<4 x s64>) = G_SEXT %phi(<4 x s32>)147  ; CHECK-NEXT:   G_STORE %ext(<4 x s64>), %ptr(p0) :: (store (<4 x s64>))148  ; CHECK-NEXT:   RET_ReallyLR149  bb.1.entry:150    liveins: $x0, $q0, $q1151 152    %0:_(<4 x s32>) = COPY $q0153    %1:_(<4 x s32>) = COPY $q1154    %ptr:_(p0) = COPY $x0155    %cmp:_(s1) = G_IMPLICIT_DEF156    G_BRCOND %cmp(s1), %bb.2157    G_BR %bb.3158 159  bb.2:160    %ld1:_(<4 x s32>) = G_LOAD %ptr(p0) :: (load (<4 x s32>))161    G_BR %bb.4162 163  bb.3:164    %ld2:_(<4 x s32>) = G_LOAD %ptr(p0) :: (load (<4 x s32>))165 166  bb.4:167    %phi:_(<4 x s32>) = G_PHI %ld1(<4 x s32>), %bb.2, %ld2(<4 x s32>), %bb.3168    %ext:_(<4 x s64>) = G_SEXT %phi169    G_STORE %ext(<4 x s64>), %ptr(p0) :: (store (<4 x s64>))170    RET_ReallyLR171 172...173 174 175# Check that we don't propagate if the extend is used by a G_PTR_ADD, which on176# AArch64 has a good chance of folding in the extend.177---178name:            sext_icst_through_phi_used_by_ptradd179tracksRegLiveness: true180body:             |181  ; CHECK-LABEL: name: sext_icst_through_phi_used_by_ptradd182  ; CHECK: bb.0.entry:183  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)184  ; CHECK-NEXT:   liveins: $w0, $w1, $x2185  ; CHECK-NEXT: {{  $}}186  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0187  ; CHECK-NEXT:   %base:_(p0) = COPY $x2188  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 2189  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one190  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.2191  ; CHECK-NEXT:   G_BR %bb.1192  ; CHECK-NEXT: {{  $}}193  ; CHECK-NEXT: bb.1:194  ; CHECK-NEXT:   successors: %bb.3(0x80000000)195  ; CHECK-NEXT: {{  $}}196  ; CHECK-NEXT:   %cst32_4:_(s32) = G_CONSTANT i32 4197  ; CHECK-NEXT:   G_BR %bb.3198  ; CHECK-NEXT: {{  $}}199  ; CHECK-NEXT: bb.2:200  ; CHECK-NEXT:   successors: %bb.3(0x80000000)201  ; CHECK-NEXT: {{  $}}202  ; CHECK-NEXT:   %cst32_10:_(s32) = G_CONSTANT i32 10203  ; CHECK-NEXT: {{  $}}204  ; CHECK-NEXT: bb.3:205  ; CHECK-NEXT:   %phi:_(s32) = G_PHI %cst32_4(s32), %bb.1, %cst32_10(s32), %bb.2206  ; CHECK-NEXT:   %ext:_(s64) = G_SEXT %phi(s32)207  ; CHECK-NEXT:   %ptr:_(p0) = G_PTR_ADD %base, %ext(s64)208  ; CHECK-NEXT:   $x0 = COPY %ptr(p0)209  ; CHECK-NEXT:   RET_ReallyLR implicit $x0210  bb.1.entry:211    liveins: $w0, $w1, $x2212 213    %0:_(s32) = COPY $w0214    %1:_(s32) = COPY $w1215    %base:_(p0) = COPY $x2216    %zero:_(s32) = G_CONSTANT i32 0217    %one:_(s32) = G_CONSTANT i32 2218    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one219    G_BRCOND %cmp(s1), %bb.2220    G_BR %bb.3221 222  bb.2:223    %cst32_4:_(s32) = G_CONSTANT i32 4224    G_BR %bb.4225 226  bb.3:227    %cst32_10:_(s32) = G_CONSTANT i32 10228 229  bb.4:230    %phi:_(s32) = G_PHI %cst32_4(s32), %bb.2, %cst32_10(s32), %bb.3231    %ext:_(s64) = G_SEXT %phi232    %ptr:_(p0) = G_PTR_ADD %base, %ext233    $x0 = COPY %ptr(p0)234    RET_ReallyLR implicit $x0235 236...237 238# Same as above but we do it here because the extend has multiple users, so the239# it probably won't cost extra instructions if we remove it.240---241name:            sext_icst_through_phi_used_by_ptradd_multiuse242tracksRegLiveness: true243body:             |244  ; CHECK-LABEL: name: sext_icst_through_phi_used_by_ptradd_multiuse245  ; CHECK: bb.0.entry:246  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)247  ; CHECK-NEXT:   liveins: $w0, $w1, $x2248  ; CHECK-NEXT: {{  $}}249  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0250  ; CHECK-NEXT:   %base:_(p0) = COPY $x2251  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 2252  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one253  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.2254  ; CHECK-NEXT:   G_BR %bb.1255  ; CHECK-NEXT: {{  $}}256  ; CHECK-NEXT: bb.1:257  ; CHECK-NEXT:   successors: %bb.3(0x80000000)258  ; CHECK-NEXT: {{  $}}259  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4260  ; CHECK-NEXT:   G_BR %bb.3261  ; CHECK-NEXT: {{  $}}262  ; CHECK-NEXT: bb.2:263  ; CHECK-NEXT:   successors: %bb.3(0x80000000)264  ; CHECK-NEXT: {{  $}}265  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 10266  ; CHECK-NEXT: {{  $}}267  ; CHECK-NEXT: bb.3:268  ; CHECK-NEXT:   %ext:_(s64) = G_PHI [[C]](s64), %bb.1, [[C1]](s64), %bb.2269  ; CHECK-NEXT:   %ptr:_(p0) = G_PTR_ADD %base, %ext(s64)270  ; CHECK-NEXT:   $x0 = COPY %ptr(p0)271  ; CHECK-NEXT:   $x1 = COPY %ext(s64)272  ; CHECK-NEXT:   RET_ReallyLR implicit $x0273  bb.1.entry:274    liveins: $w0, $w1, $x2275 276    %0:_(s32) = COPY $w0277    %1:_(s32) = COPY $w1278    %base:_(p0) = COPY $x2279    %zero:_(s32) = G_CONSTANT i32 0280    %one:_(s32) = G_CONSTANT i32 2281    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one282    G_BRCOND %cmp(s1), %bb.2283    G_BR %bb.3284 285  bb.2:286    %cst32_4:_(s32) = G_CONSTANT i32 4287    G_BR %bb.4288 289  bb.3:290    %cst32_10:_(s32) = G_CONSTANT i32 10291 292  bb.4:293    %phi:_(s32) = G_PHI %cst32_4(s32), %bb.2, %cst32_10(s32), %bb.3294    %ext:_(s64) = G_SEXT %phi295    %ptr:_(p0) = G_PTR_ADD %base, %ext296    $x0 = COPY %ptr(p0)297    $x1 = COPY %ext(s64)298    RET_ReallyLR implicit $x0299 300...301 302# Check we don't propagate if there are more than 2 unique incoming values in the phi.303# Doing so might cause too much code bloat.304---305name:            zext_icst_through_phi_too_many_incoming306tracksRegLiveness: true307body:             |308  ; CHECK-LABEL: name: zext_icst_through_phi_too_many_incoming309  ; CHECK: bb.0.entry:310  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)311  ; CHECK-NEXT:   liveins: $w0, $w1312  ; CHECK-NEXT: {{  $}}313  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0314  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 2315  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one316  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.2317  ; CHECK-NEXT:   G_BR %bb.1318  ; CHECK-NEXT: {{  $}}319  ; CHECK-NEXT: bb.1:320  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.4(0x40000000)321  ; CHECK-NEXT: {{  $}}322  ; CHECK-NEXT:   %cst32_4:_(s32) = G_CONSTANT i32 4323  ; CHECK-NEXT:   %cond:_(s1) = G_IMPLICIT_DEF324  ; CHECK-NEXT:   G_BRCOND %cond(s1), %bb.3325  ; CHECK-NEXT:   G_BR %bb.4326  ; CHECK-NEXT: {{  $}}327  ; CHECK-NEXT: bb.2:328  ; CHECK-NEXT:   successors: %bb.4(0x80000000)329  ; CHECK-NEXT: {{  $}}330  ; CHECK-NEXT:   %cst32_10:_(s32) = G_CONSTANT i32 10331  ; CHECK-NEXT:   G_BR %bb.4332  ; CHECK-NEXT: {{  $}}333  ; CHECK-NEXT: bb.3:334  ; CHECK-NEXT:   successors: %bb.4(0x80000000)335  ; CHECK-NEXT: {{  $}}336  ; CHECK-NEXT:   %cst32_42:_(s32) = G_CONSTANT i32 42337  ; CHECK-NEXT: {{  $}}338  ; CHECK-NEXT: bb.4:339  ; CHECK-NEXT:   %phi:_(s32) = G_PHI %cst32_4(s32), %bb.1, %cst32_10(s32), %bb.2, %cst32_42(s32), %bb.3340  ; CHECK-NEXT:   %ext:_(s64) = G_ZEXT %phi(s32)341  ; CHECK-NEXT:   $x0 = COPY %ext(s64)342  ; CHECK-NEXT:   RET_ReallyLR implicit $x0343  bb.1.entry:344    liveins: $w0, $w1345 346    %0:_(s32) = COPY $w0347    %1:_(s32) = COPY $w1348    %zero:_(s32) = G_CONSTANT i32 0349    %one:_(s32) = G_CONSTANT i32 2350    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one351    G_BRCOND %cmp(s1), %bb.2352    G_BR %bb.3353 354  bb.2:355    %cst32_4:_(s32) = G_CONSTANT i32 4356    %cond:_(s1) = G_IMPLICIT_DEF357    G_BRCOND %cond, %bb.5358    G_BR %bb.4359 360  bb.3:361    %cst32_10:_(s32) = G_CONSTANT i32 10362    G_BR %bb.4363 364  bb.5:365    %cst32_42:_(s32) = G_CONSTANT i32 42366 367  bb.4:368    %phi:_(s32) = G_PHI %cst32_4(s32), %bb.2, %cst32_10(s32), %bb.3, %cst32_42(s32), %bb.5369    %ext:_(s64) = G_ZEXT %phi370    $x0 = COPY %ext(s64)371    RET_ReallyLR implicit $x0372 373...374 375# Check that we don't propagate if the extension would be of a non-allowed inst.376---377name:            sext_add_through_phi378tracksRegLiveness: true379body:             |380  ; CHECK-LABEL: name: sext_add_through_phi381  ; CHECK: bb.0.entry:382  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)383  ; CHECK-NEXT:   liveins: $w0, $w1384  ; CHECK-NEXT: {{  $}}385  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0386  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1387  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 2388  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one389  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.2390  ; CHECK-NEXT:   G_BR %bb.1391  ; CHECK-NEXT: {{  $}}392  ; CHECK-NEXT: bb.1:393  ; CHECK-NEXT:   successors: %bb.3(0x80000000)394  ; CHECK-NEXT: {{  $}}395  ; CHECK-NEXT:   %add:_(s32) = G_ADD [[COPY]], [[COPY1]]396  ; CHECK-NEXT:   G_BR %bb.3397  ; CHECK-NEXT: {{  $}}398  ; CHECK-NEXT: bb.2:399  ; CHECK-NEXT:   successors: %bb.3(0x80000000)400  ; CHECK-NEXT: {{  $}}401  ; CHECK-NEXT:   %cst32_10:_(s32) = G_CONSTANT i32 10402  ; CHECK-NEXT: {{  $}}403  ; CHECK-NEXT: bb.3:404  ; CHECK-NEXT:   %phi:_(s32) = G_PHI %add(s32), %bb.1, %cst32_10(s32), %bb.2405  ; CHECK-NEXT:   %ext:_(s64) = G_SEXT %phi(s32)406  ; CHECK-NEXT:   $x0 = COPY %ext(s64)407  ; CHECK-NEXT:   RET_ReallyLR implicit $x0408  bb.1.entry:409    liveins: $w0, $w1410 411    %0:_(s32) = COPY $w0412    %1:_(s32) = COPY $w1413    %zero:_(s32) = G_CONSTANT i32 0414    %one:_(s32) = G_CONSTANT i32 2415    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one416    G_BRCOND %cmp(s1), %bb.2417    G_BR %bb.3418 419  bb.2:420    %add:_(s32) = G_ADD %0, %1421    G_BR %bb.4422 423  bb.3:424    %cst32_10:_(s32) = G_CONSTANT i32 10425 426  bb.4:427    %phi:_(s32) = G_PHI %add(s32), %bb.2, %cst32_10(s32), %bb.3428    %ext:_(s64) = G_SEXT %phi429    $x0 = COPY %ext(s64)430    RET_ReallyLR implicit $x0431 432...433 434# Same as above but allowed with a G_ANYEXT.435---436name:            anyext_add_through_phi437tracksRegLiveness: true438body:             |439  ; CHECK-LABEL: name: anyext_add_through_phi440  ; CHECK: bb.0.entry:441  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)442  ; CHECK-NEXT:   liveins: $w0, $w1443  ; CHECK-NEXT: {{  $}}444  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0445  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1446  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 2447  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one448  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.2449  ; CHECK-NEXT:   G_BR %bb.1450  ; CHECK-NEXT: {{  $}}451  ; CHECK-NEXT: bb.1:452  ; CHECK-NEXT:   successors: %bb.3(0x80000000)453  ; CHECK-NEXT: {{  $}}454  ; CHECK-NEXT:   %add:_(s32) = G_ADD [[COPY]], [[COPY1]]455  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT %add(s32)456  ; CHECK-NEXT:   G_BR %bb.3457  ; CHECK-NEXT: {{  $}}458  ; CHECK-NEXT: bb.2:459  ; CHECK-NEXT:   successors: %bb.3(0x80000000)460  ; CHECK-NEXT: {{  $}}461  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 10462  ; CHECK-NEXT: {{  $}}463  ; CHECK-NEXT: bb.3:464  ; CHECK-NEXT:   %ext:_(s64) = G_PHI [[ANYEXT]](s64), %bb.1, [[C]](s64), %bb.2465  ; CHECK-NEXT:   $x0 = COPY %ext(s64)466  ; CHECK-NEXT:   RET_ReallyLR implicit $x0467  bb.1.entry:468    liveins: $w0, $w1469 470    %0:_(s32) = COPY $w0471    %1:_(s32) = COPY $w1472    %zero:_(s32) = G_CONSTANT i32 0473    %one:_(s32) = G_CONSTANT i32 2474    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one475    G_BRCOND %cmp(s1), %bb.2476    G_BR %bb.3477 478  bb.2:479    %add:_(s32) = G_ADD %0, %1480    G_BR %bb.4481 482  bb.3:483    %cst32_10:_(s32) = G_CONSTANT i32 10484 485  bb.4:486    %phi:_(s32) = G_PHI %add(s32), %bb.2, %cst32_10(s32), %bb.3487    %ext:_(s64) = G_ANYEXT %phi488    $x0 = COPY %ext(s64)489    RET_ReallyLR implicit $x0490 491...492# Same as above but with a source MI with multiple destination operands.493---494name:            anyext_add_through_phi_multiple_operands495tracksRegLiveness: true496body:             |497  ; CHECK-LABEL: name: anyext_add_through_phi_multiple_operands498  ; CHECK: bb.0.entry:499  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)500  ; CHECK-NEXT:   liveins: $w0, $w1501  ; CHECK-NEXT: {{  $}}502  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0503  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1504  ; CHECK-NEXT:   %one:_(s32) = G_CONSTANT i32 2505  ; CHECK-NEXT:   %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one506  ; CHECK-NEXT:   G_BRCOND %cmp(s1), %bb.2507  ; CHECK-NEXT:   G_BR %bb.1508  ; CHECK-NEXT: {{  $}}509  ; CHECK-NEXT: bb.1:510  ; CHECK-NEXT:   successors: %bb.3(0x80000000)511  ; CHECK-NEXT: {{  $}}512  ; CHECK-NEXT:   %big0:_(s64) = G_SEXT [[COPY]](s32)513  ; CHECK-NEXT:   %big1:_(s64) = G_SEXT [[COPY1]](s32)514  ; CHECK-NEXT:   %add:_(s64) = G_ADD %big0, %big1515  ; CHECK-NEXT:   %first:_(s32), %second:_(s32) = G_UNMERGE_VALUES %add(s64)516  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT %second(s32)517  ; CHECK-NEXT:   G_BR %bb.3518  ; CHECK-NEXT: {{  $}}519  ; CHECK-NEXT: bb.2:520  ; CHECK-NEXT:   successors: %bb.3(0x80000000)521  ; CHECK-NEXT: {{  $}}522  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 10523  ; CHECK-NEXT: {{  $}}524  ; CHECK-NEXT: bb.3:525  ; CHECK-NEXT:   %ext:_(s64) = G_PHI [[ANYEXT]](s64), %bb.1, [[C]](s64), %bb.2526  ; CHECK-NEXT:   $x0 = COPY %ext(s64)527  ; CHECK-NEXT:   RET_ReallyLR implicit $x0528  bb.1.entry:529    liveins: $w0, $w1530 531    %0:_(s32) = COPY $w0532    %1:_(s32) = COPY $w1533    %zero:_(s32) = G_CONSTANT i32 0534    %one:_(s32) = G_CONSTANT i32 2535    %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one536    G_BRCOND %cmp(s1), %bb.2537    G_BR %bb.3538 539  bb.2:540    %big0:_(s64) = G_SEXT %0541    %big1:_(s64) = G_SEXT %1542    %add:_(s64) = G_ADD %big0, %big1543    %first:_(s32), %second:_(s32) = G_UNMERGE_VALUES %add:_(s64)544    G_BR %bb.4545 546  bb.3:547    %cst32_10:_(s32) = G_CONSTANT i32 10548 549  bb.4:550    %phi:_(s32) = G_PHI %second, %bb.2, %cst32_10, %bb.3551    %ext:_(s64) = G_ANYEXT %phi552    $x0 = COPY %ext(s64)553    RET_ReallyLR implicit $x0554 555...556