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