1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -verify-machineinstrs -mtriple arm64-apple-ios -global-isel -run-pass=aarch64-prelegalizer-combiner -o - %s | FileCheck %s 3 4... 5--- 6name: can_fold_i8 7tracksRegLiveness: true 8body: | 9 ; CHECK-LABEL: name: can_fold_i8 10 ; CHECK: bb.0.entry: 11 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 12 ; CHECK-NEXT: liveins: $w0, $w1 13 ; CHECK-NEXT: {{ $}} 14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 15 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8 16 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 17 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 8 18 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]] 19 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 256 20 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]] 21 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 22 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]] 23 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.2 24 ; CHECK-NEXT: G_BR %bb.1 25 ; CHECK-NEXT: {{ $}} 26 ; CHECK-NEXT: bb.1: 27 ; CHECK-NEXT: successors: 28 ; CHECK-NEXT: {{ $}} 29 ; CHECK-NEXT: G_TRAP 30 ; CHECK-NEXT: {{ $}} 31 ; CHECK-NEXT: bb.2: 32 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32) 33 ; CHECK-NEXT: RET_ReallyLR implicit $w0 34 bb.1.entry: 35 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 36 liveins: $w0, $w1 37 38 %2:_(s32) = COPY $w0 39 %3:_(s32) = G_ASSERT_ZEXT %2, 8 40 %0:_(s8) = G_TRUNC %3(s32) 41 %4:_(s32) = COPY $w1 42 %5:_(s32) = G_ASSERT_ZEXT %4, 8 43 %1:_(s8) = G_TRUNC %5(s32) 44 %6:_(s8), %7:_(s1) = G_UADDO %0, %1 45 G_BRCOND %7(s1), %bb.2 46 G_BR %bb.3 47 48 bb.2: 49 successors: 50 51 G_TRAP 52 53 bb.3: 54 %8:_(s32) = G_ZEXT %6(s8) 55 $w0 = COPY %8(s32) 56 RET_ReallyLR implicit $w0 57 58... 59--- 60name: can_fold_i16_1_result_used_by_zext 61tracksRegLiveness: true 62body: | 63 ; CHECK-LABEL: name: can_fold_i16_1_result_used_by_zext 64 ; CHECK: bb.0: 65 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 66 ; CHECK-NEXT: liveins: $w0, $w1 67 ; CHECK-NEXT: {{ $}} 68 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 69 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 70 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 71 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 72 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]] 73 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536 74 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]] 75 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 76 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]] 77 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.2 78 ; CHECK-NEXT: G_BR %bb.1 79 ; CHECK-NEXT: {{ $}} 80 ; CHECK-NEXT: bb.1: 81 ; CHECK-NEXT: successors: 82 ; CHECK-NEXT: {{ $}} 83 ; CHECK-NEXT: G_TRAP 84 ; CHECK-NEXT: {{ $}} 85 ; CHECK-NEXT: bb.2: 86 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32) 87 ; CHECK-NEXT: RET_ReallyLR implicit $w0 88 bb.1: 89 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 90 liveins: $w0, $w1 91 92 %2:_(s32) = COPY $w0 93 %3:_(s32) = G_ASSERT_ZEXT %2, 16 94 %0:_(s16) = G_TRUNC %3(s32) 95 %4:_(s32) = COPY $w1 96 %5:_(s32) = G_ASSERT_ZEXT %4, 16 97 %1:_(s16) = G_TRUNC %5(s32) 98 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 99 G_BRCOND %7(s1), %bb.2 100 G_BR %bb.3 101 102 bb.2: 103 successors: 104 105 G_TRAP 106 107 bb.3: 108 %8:_(s32) = G_ZEXT %6(s16) 109 $w0 = COPY %8(s32) 110 RET_ReallyLR implicit $w0 111 112... 113--- 114name: can_fold_i16_2_result_used_by_multiple_calls 115tracksRegLiveness: true 116body: | 117 ; CHECK-LABEL: name: can_fold_i16_2_result_used_by_multiple_calls 118 ; CHECK: bb.0: 119 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 120 ; CHECK-NEXT: liveins: $w0, $w1, $x2 121 ; CHECK-NEXT: {{ $}} 122 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 123 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 124 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 125 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 126 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]] 127 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536 128 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]] 129 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 130 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]] 131 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.2 132 ; CHECK-NEXT: G_BR %bb.1 133 ; CHECK-NEXT: {{ $}} 134 ; CHECK-NEXT: bb.1: 135 ; CHECK-NEXT: successors: 136 ; CHECK-NEXT: {{ $}} 137 ; CHECK-NEXT: G_TRAP 138 ; CHECK-NEXT: {{ $}} 139 ; CHECK-NEXT: bb.2: 140 ; CHECK-NEXT: liveins: $x2 141 ; CHECK-NEXT: {{ $}} 142 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 143 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32) 144 ; CHECK-NEXT: BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 145 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 146 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 147 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32) 148 ; CHECK-NEXT: BLR killed renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 149 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 150 ; CHECK-NEXT: RET_ReallyLR 151 bb.1: 152 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 153 liveins: $w0, $w1, $x2 154 155 %2:_(s32) = COPY $w0 156 %3:_(s32) = G_ASSERT_ZEXT %2, 16 157 %0:_(s16) = G_TRUNC %3(s32) 158 %4:_(s32) = COPY $w1 159 %5:_(s32) = G_ASSERT_ZEXT %4, 16 160 %1:_(s16) = G_TRUNC %5(s32) 161 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 162 G_BRCOND %7(s1), %bb.2 163 G_BR %bb.3 164 165 bb.2: 166 successors: 167 168 G_TRAP 169 170 bb.3: 171 liveins: $x2 172 173 ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 174 %8:_(s32) = G_ANYEXT %6(s16) 175 $w0 = COPY %8(s32) 176 BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 177 ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 178 ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 179 $w0 = COPY %8(s32) 180 BLR killed renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 181 ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 182 RET_ReallyLR 183 184... 185--- 186name: can_fold_i16_3_result_used_by_anyext 187tracksRegLiveness: true 188body: | 189 ; CHECK-LABEL: name: can_fold_i16_3_result_used_by_anyext 190 ; CHECK: bb.0: 191 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 192 ; CHECK-NEXT: liveins: $w0, $w1 193 ; CHECK-NEXT: {{ $}} 194 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 195 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 196 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 197 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 198 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]] 199 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536 200 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]] 201 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 202 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]] 203 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.2 204 ; CHECK-NEXT: G_BR %bb.1 205 ; CHECK-NEXT: {{ $}} 206 ; CHECK-NEXT: bb.1: 207 ; CHECK-NEXT: successors: 208 ; CHECK-NEXT: {{ $}} 209 ; CHECK-NEXT: G_TRAP 210 ; CHECK-NEXT: {{ $}} 211 ; CHECK-NEXT: bb.2: 212 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32) 213 ; CHECK-NEXT: RET_ReallyLR implicit $w0 214 bb.1: 215 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 216 liveins: $w0, $w1 217 218 %2:_(s32) = COPY $w0 219 %3:_(s32) = G_ASSERT_ZEXT %2, 16 220 %0:_(s16) = G_TRUNC %3(s32) 221 %4:_(s32) = COPY $w1 222 %5:_(s32) = G_ASSERT_ZEXT %4, 16 223 %1:_(s16) = G_TRUNC %5(s32) 224 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 225 G_BRCOND %7(s1), %bb.2 226 G_BR %bb.3 227 228 bb.2: 229 successors: 230 231 G_TRAP 232 233 bb.3: 234 %8:_(s32) = G_ANYEXT %6(s16) 235 $w0 = COPY %8(s32) 236 RET_ReallyLR implicit $w0 237 238... 239--- 240name: can_fold_i16_4_cond_dbg_user 241tracksRegLiveness: true 242body: | 243 ; CHECK-LABEL: name: can_fold_i16_4_cond_dbg_user 244 ; CHECK: bb.0: 245 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 246 ; CHECK-NEXT: liveins: $w0, $w1 247 ; CHECK-NEXT: {{ $}} 248 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 249 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 250 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 251 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 252 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]] 253 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536 254 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]] 255 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 256 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]] 257 ; CHECK-NEXT: DBG_VALUE [[ICMP]](s1) 258 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.2 259 ; CHECK-NEXT: G_BR %bb.1 260 ; CHECK-NEXT: {{ $}} 261 ; CHECK-NEXT: bb.1: 262 ; CHECK-NEXT: successors: 263 ; CHECK-NEXT: {{ $}} 264 ; CHECK-NEXT: G_TRAP 265 ; CHECK-NEXT: {{ $}} 266 ; CHECK-NEXT: bb.2: 267 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32) 268 ; CHECK-NEXT: RET_ReallyLR implicit $w0 269 bb.1: 270 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 271 liveins: $w0, $w1 272 273 %2:_(s32) = COPY $w0 274 %3:_(s32) = G_ASSERT_ZEXT %2, 16 275 %0:_(s16) = G_TRUNC %3(s32) 276 %4:_(s32) = COPY $w1 277 %5:_(s32) = G_ASSERT_ZEXT %4, 16 278 %1:_(s16) = G_TRUNC %5(s32) 279 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 280 DBG_VALUE %7(s1) 281 G_BRCOND %7(s1), %bb.2 282 G_BR %bb.3 283 284 bb.2: 285 successors: 286 287 G_TRAP 288 289 bb.3: 290 %8:_(s32) = G_ZEXT %6(s16) 291 $w0 = COPY %8(s32) 292 RET_ReallyLR implicit $w0 293 294... 295--- 296name: can_fold_i16_5_result_dbg_user 297tracksRegLiveness: true 298body: | 299 ; CHECK-LABEL: name: can_fold_i16_5_result_dbg_user 300 ; CHECK: bb.0: 301 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 302 ; CHECK-NEXT: liveins: $w0, $w1 303 ; CHECK-NEXT: {{ $}} 304 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 305 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 306 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 307 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 308 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]] 309 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536 310 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]] 311 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 312 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]] 313 ; CHECK-NEXT: DBG_VALUE %6:_(s16) 314 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.2 315 ; CHECK-NEXT: G_BR %bb.1 316 ; CHECK-NEXT: {{ $}} 317 ; CHECK-NEXT: bb.1: 318 ; CHECK-NEXT: successors: 319 ; CHECK-NEXT: {{ $}} 320 ; CHECK-NEXT: G_TRAP 321 ; CHECK-NEXT: {{ $}} 322 ; CHECK-NEXT: bb.2: 323 ; CHECK-NEXT: $w0 = COPY [[ADD]](s32) 324 ; CHECK-NEXT: RET_ReallyLR implicit $w0 325 bb.1: 326 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 327 liveins: $w0, $w1 328 329 %2:_(s32) = COPY $w0 330 %3:_(s32) = G_ASSERT_ZEXT %2, 16 331 %0:_(s16) = G_TRUNC %3(s32) 332 %4:_(s32) = COPY $w1 333 %5:_(s32) = G_ASSERT_ZEXT %4, 16 334 %1:_(s16) = G_TRUNC %5(s32) 335 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 336 DBG_VALUE %6(s16) 337 G_BRCOND %7(s1), %bb.2 338 G_BR %bb.3 339 340 bb.2: 341 successors: 342 343 G_TRAP 344 345 bb.3: 346 %8:_(s32) = G_ZEXT %6(s16) 347 $w0 = COPY %8(s32) 348 RET_ReallyLR implicit $w0 349 350... 351--- 352name: cannot_fold_1_result_used_before_branch 353tracksRegLiveness: true 354body: | 355 ; CHECK-LABEL: name: cannot_fold_1_result_used_before_branch 356 ; CHECK: bb.0: 357 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 358 ; CHECK-NEXT: liveins: $w0, $w1, $x2 359 ; CHECK-NEXT: {{ $}} 360 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 361 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 362 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 363 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 364 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 365 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 366 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]] 367 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 368 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16) 369 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 370 ; CHECK-NEXT: BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 371 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 372 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true 373 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]] 374 ; CHECK-NEXT: G_BRCOND [[XOR]](s1), %bb.2 375 ; CHECK-NEXT: G_BR %bb.1 376 ; CHECK-NEXT: {{ $}} 377 ; CHECK-NEXT: bb.1: 378 ; CHECK-NEXT: successors: 379 ; CHECK-NEXT: {{ $}} 380 ; CHECK-NEXT: G_TRAP 381 ; CHECK-NEXT: {{ $}} 382 ; CHECK-NEXT: bb.2: 383 ; CHECK-NEXT: liveins: $x2 384 ; CHECK-NEXT: {{ $}} 385 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 386 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16) 387 ; CHECK-NEXT: $w0 = COPY [[ANYEXT1]](s32) 388 ; CHECK-NEXT: BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 389 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 390 ; CHECK-NEXT: RET_ReallyLR 391 bb.1: 392 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 393 liveins: $w0, $w1, $x2 394 395 %2:_(s32) = COPY $w0 396 %3:_(s32) = G_ASSERT_ZEXT %2, 16 397 %0:_(s16) = G_TRUNC %3(s32) 398 %4:_(s32) = COPY $w1 399 %5:_(s32) = G_ASSERT_ZEXT %4, 16 400 %1:_(s16) = G_TRUNC %5(s32) 401 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 402 ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 403 %8:_(s32) = G_ANYEXT %6(s16) 404 $w0 = COPY %8(s32) 405 BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 406 ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 407 G_BRCOND %7(s1), %bb.2 408 G_BR %bb.3 409 410 bb.2: 411 successors: 412 413 G_TRAP 414 415 bb.3: 416 liveins: $x2 417 418 ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp 419 %9:_(s32) = G_ANYEXT %6(s16) 420 $w0 = COPY %9(s32) 421 BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 422 ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp 423 RET_ReallyLR 424 425... 426--- 427name: cannot_fold_2_result_used_in_fail_block 428tracksRegLiveness: true 429body: | 430 ; CHECK-LABEL: name: cannot_fold_2_result_used_in_fail_block 431 ; CHECK: bb.0: 432 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) 433 ; CHECK-NEXT: liveins: $w0, $w1 434 ; CHECK-NEXT: {{ $}} 435 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 436 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 437 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 438 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 439 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 440 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 441 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 442 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]] 443 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16) 444 ; CHECK-NEXT: G_BRCOND [[UADDO1]](s1), %bb.2 445 ; CHECK-NEXT: G_BR %bb.1 446 ; CHECK-NEXT: {{ $}} 447 ; CHECK-NEXT: bb.1: 448 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s32) = G_PHI [[C]](s32), %bb.2, [[ANYEXT]](s32), %bb.0 449 ; CHECK-NEXT: $w0 = COPY [[PHI]](s32) 450 ; CHECK-NEXT: RET_ReallyLR implicit $w0 451 ; CHECK-NEXT: {{ $}} 452 ; CHECK-NEXT: bb.2: 453 ; CHECK-NEXT: successors: %bb.1(0x80000000) 454 ; CHECK-NEXT: {{ $}} 455 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16) 456 ; CHECK-NEXT: $w0 = COPY [[ANYEXT1]](s32) 457 ; CHECK-NEXT: G_BR %bb.1 458 bb.1: 459 liveins: $w0, $w1 460 461 %2:_(s32) = COPY $w0 462 %3:_(s32) = G_ASSERT_ZEXT %2, 16 463 %0:_(s16) = G_TRUNC %3(s32) 464 %4:_(s32) = COPY $w1 465 %5:_(s32) = G_ASSERT_ZEXT %4, 16 466 %1:_(s16) = G_TRUNC %5(s32) 467 %11:_(s16) = G_CONSTANT i16 10 468 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 469 G_BRCOND %7(s1), %bb.3 470 G_BR %bb.2 471 472 bb.2: 473 %9:_(s16) = G_PHI %11(s16), %bb.3, %6(s16), %bb.1 474 %10:_(s32) = G_ANYEXT %9(s16) 475 $w0 = COPY %10(s32) 476 RET_ReallyLR implicit $w0 477 478 bb.3: 479 %8:_(s32) = G_ANYEXT %6(s16) 480 $w0 = COPY %8(s32) 481 G_BR %bb.2 482 483... 484--- 485name: cannot_fold_3_result_used_in_successor_before_fail_block 486tracksRegLiveness: true 487body: | 488 ; CHECK-LABEL: name: cannot_fold_3_result_used_in_successor_before_fail_block 489 ; CHECK: bb.0: 490 ; CHECK-NEXT: successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 491 ; CHECK-NEXT: liveins: $w0, $w1, $x2 492 ; CHECK-NEXT: {{ $}} 493 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 494 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 495 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 496 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 497 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 498 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 499 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]] 500 ; CHECK-NEXT: G_BR %bb.1 501 ; CHECK-NEXT: {{ $}} 502 ; CHECK-NEXT: bb.1: 503 ; CHECK-NEXT: successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 504 ; CHECK-NEXT: liveins: $x2 505 ; CHECK-NEXT: {{ $}} 506 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16) 507 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 508 ; CHECK-NEXT: BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 509 ; CHECK-NEXT: G_BRCOND [[UADDO1]](s1), %bb.2 510 ; CHECK-NEXT: G_BR %bb.3 511 ; CHECK-NEXT: {{ $}} 512 ; CHECK-NEXT: bb.2: 513 ; CHECK-NEXT: successors: 514 ; CHECK-NEXT: {{ $}} 515 ; CHECK-NEXT: G_TRAP 516 ; CHECK-NEXT: {{ $}} 517 ; CHECK-NEXT: bb.3: 518 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s16) 519 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32) 520 ; CHECK-NEXT: RET_ReallyLR implicit $w0 521 bb.1: 522 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 523 liveins: $w0, $w1, $x2 524 525 %2:_(s32) = COPY $w0 526 %3:_(s32) = G_ASSERT_ZEXT %2, 16 527 %0:_(s16) = G_TRUNC %3(s32) 528 %4:_(s32) = COPY $w1 529 %5:_(s32) = G_ASSERT_ZEXT %4, 16 530 %1:_(s16) = G_TRUNC %5(s32) 531 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 532 G_BR %bb.4 533 534 bb.4: 535 liveins: $x2 536 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 537 538 %8:_(s32) = G_ANYEXT %6(s16) 539 $w0 = COPY %8(s32) 540 BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0 541 G_BRCOND %7(s1), %bb.2 542 G_BR %bb.3 543 544 bb.2: 545 successors: 546 547 G_TRAP 548 549 bb.3: 550 %9:_(s32) = G_ZEXT %6(s16) 551 $w0 = COPY %9(s32) 552 RET_ReallyLR implicit $w0 553 554... 555--- 556name: cannot_fold_i8_trunc_i 557tracksRegLiveness: true 558body: | 559 ; CHECK-LABEL: name: cannot_fold_i8_trunc_i 560 ; CHECK: bb.0: 561 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 562 ; CHECK-NEXT: liveins: $w0, $w1 563 ; CHECK-NEXT: {{ $}} 564 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 565 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 566 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 567 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 568 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 8 569 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT1]](s32) 570 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16) 571 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s8), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC2]], [[TRUNC1]] 572 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true 573 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]] 574 ; CHECK-NEXT: G_BRCOND [[XOR]](s1), %bb.2 575 ; CHECK-NEXT: G_BR %bb.1 576 ; CHECK-NEXT: {{ $}} 577 ; CHECK-NEXT: bb.1: 578 ; CHECK-NEXT: successors: 579 ; CHECK-NEXT: {{ $}} 580 ; CHECK-NEXT: G_TRAP 581 ; CHECK-NEXT: {{ $}} 582 ; CHECK-NEXT: bb.2: 583 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s8) 584 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32) 585 ; CHECK-NEXT: RET_ReallyLR implicit $w0 586 bb.1: 587 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 588 liveins: $w0, $w1 589 590 %2:_(s32) = COPY $w0 591 %3:_(s32) = G_ASSERT_ZEXT %2, 16 592 %0:_(s16) = G_TRUNC %3(s32) 593 %4:_(s32) = COPY $w1 594 %5:_(s32) = G_ASSERT_ZEXT %4, 8 595 %1:_(s8) = G_TRUNC %5(s32) 596 %6:_(s8) = G_TRUNC %0(s16) 597 %7:_(s8), %8:_(s1) = G_UADDO %6, %1 598 G_BRCOND %8(s1), %bb.2 599 G_BR %bb.3 600 601 bb.2: 602 successors: 603 604 G_TRAP 605 606 bb.3: 607 %9:_(s32) = G_ZEXT %7(s8) 608 $w0 = COPY %9(s32) 609 RET_ReallyLR implicit $w0 610 611... 612--- 613name: cannot_fold_i8_trunc_b 614tracksRegLiveness: true 615body: | 616 ; CHECK-LABEL: name: cannot_fold_i8_trunc_b 617 ; CHECK: bb.0: 618 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 619 ; CHECK-NEXT: liveins: $w0, $w1 620 ; CHECK-NEXT: {{ $}} 621 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 622 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8 623 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT]](s32) 624 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 625 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 626 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 627 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC1]](s16) 628 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s8), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC2]] 629 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true 630 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]] 631 ; CHECK-NEXT: G_BRCOND [[XOR]](s1), %bb.2 632 ; CHECK-NEXT: G_BR %bb.1 633 ; CHECK-NEXT: {{ $}} 634 ; CHECK-NEXT: bb.1: 635 ; CHECK-NEXT: successors: 636 ; CHECK-NEXT: {{ $}} 637 ; CHECK-NEXT: G_TRAP 638 ; CHECK-NEXT: {{ $}} 639 ; CHECK-NEXT: bb.2: 640 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s8) 641 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32) 642 ; CHECK-NEXT: RET_ReallyLR implicit $w0 643 bb.1: 644 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 645 liveins: $w0, $w1 646 647 %2:_(s32) = COPY $w0 648 %3:_(s32) = G_ASSERT_ZEXT %2, 8 649 %0:_(s8) = G_TRUNC %3(s32) 650 %4:_(s32) = COPY $w1 651 %5:_(s32) = G_ASSERT_ZEXT %4, 16 652 %1:_(s16) = G_TRUNC %5(s32) 653 %6:_(s8) = G_TRUNC %1(s16) 654 %7:_(s8), %8:_(s1) = G_UADDO %0, %6 655 G_BRCOND %8(s1), %bb.2 656 G_BR %bb.3 657 658 bb.2: 659 successors: 660 661 G_TRAP 662 663 bb.3: 664 %9:_(s32) = G_ZEXT %7(s8) 665 $w0 = COPY %9(s32) 666 RET_ReallyLR implicit $w0 667 668... 669--- 670name: cannot_fold_i8_trunc_both 671tracksRegLiveness: true 672body: | 673 ; CHECK-LABEL: name: cannot_fold_i8_trunc_both 674 ; CHECK: bb.0: 675 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 676 ; CHECK-NEXT: liveins: $w0, $w1 677 ; CHECK-NEXT: {{ $}} 678 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 679 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 680 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 681 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 682 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 683 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 684 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16) 685 ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC1]](s16) 686 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s8), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC2]], [[TRUNC3]] 687 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true 688 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]] 689 ; CHECK-NEXT: G_BRCOND [[XOR]](s1), %bb.2 690 ; CHECK-NEXT: G_BR %bb.1 691 ; CHECK-NEXT: {{ $}} 692 ; CHECK-NEXT: bb.1: 693 ; CHECK-NEXT: successors: 694 ; CHECK-NEXT: {{ $}} 695 ; CHECK-NEXT: G_TRAP 696 ; CHECK-NEXT: {{ $}} 697 ; CHECK-NEXT: bb.2: 698 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s8) 699 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32) 700 ; CHECK-NEXT: RET_ReallyLR implicit $w0 701 bb.1: 702 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 703 liveins: $w0, $w1 704 705 %2:_(s32) = COPY $w0 706 %3:_(s32) = G_ASSERT_ZEXT %2, 16 707 %0:_(s16) = G_TRUNC %3(s32) 708 %4:_(s32) = COPY $w1 709 %5:_(s32) = G_ASSERT_ZEXT %4, 16 710 %1:_(s16) = G_TRUNC %5(s32) 711 %6:_(s8) = G_TRUNC %0(s16) 712 %7:_(s8) = G_TRUNC %1(s16) 713 %8:_(s8), %9:_(s1) = G_UADDO %6, %7 714 G_BRCOND %9(s1), %bb.2 715 G_BR %bb.3 716 717 bb.2: 718 successors: 719 720 G_TRAP 721 722 bb.3: 723 %10:_(s32) = G_ZEXT %8(s8) 724 $w0 = COPY %10(s32) 725 RET_ReallyLR implicit $w0 726 727... 728--- 729name: cannot_fold_overflow_status_used_in_select 730tracksRegLiveness: true 731body: | 732 bb.1: 733 liveins: $w0, $w1 734 735 ; CHECK-LABEL: name: cannot_fold_overflow_status_used_in_select 736 ; CHECK: liveins: $w0, $w1 737 ; CHECK-NEXT: {{ $}} 738 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 739 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 740 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 741 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 742 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 743 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 744 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 10 745 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]] 746 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[UADDO1]](s1), [[C]], [[UADDO]] 747 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[SELECT]](s16) 748 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32) 749 ; CHECK-NEXT: RET_ReallyLR implicit $w0 750 %2:_(s32) = COPY $w0 751 %3:_(s32) = G_ASSERT_ZEXT %2, 16 752 %0:_(s16) = G_TRUNC %3(s32) 753 %4:_(s32) = COPY $w1 754 %5:_(s32) = G_ASSERT_ZEXT %4, 16 755 %1:_(s16) = G_TRUNC %5(s32) 756 %9:_(s16) = G_CONSTANT i16 10 757 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 758 %8:_(s16) = G_SELECT %7(s1), %9, %6 759 %10:_(s32) = G_ZEXT %8(s16) 760 $w0 = COPY %10(s32) 761 RET_ReallyLR implicit $w0 762 763... 764--- 765name: cannot_fold_i16_inputs_not_assert_zext 766tracksRegLiveness: true 767body: | 768 ; CHECK-LABEL: name: cannot_fold_i16_inputs_not_assert_zext 769 ; CHECK: bb.0: 770 ; CHECK-NEXT: successors: %bb.1(0x00000800), %bb.2(0x7ffff800) 771 ; CHECK-NEXT: liveins: $w0, $w1 772 ; CHECK-NEXT: {{ $}} 773 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 774 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 775 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 776 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 777 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]] 778 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true 779 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]] 780 ; CHECK-NEXT: G_BRCOND [[XOR]](s1), %bb.2 781 ; CHECK-NEXT: G_BR %bb.1 782 ; CHECK-NEXT: {{ $}} 783 ; CHECK-NEXT: bb.1: 784 ; CHECK-NEXT: successors: 785 ; CHECK-NEXT: {{ $}} 786 ; CHECK-NEXT: G_TRAP 787 ; CHECK-NEXT: {{ $}} 788 ; CHECK-NEXT: bb.2: 789 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16) 790 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 791 ; CHECK-NEXT: RET_ReallyLR implicit $w0 792 bb.1: 793 successors: %bb.2(0x00000800), %bb.3(0x7ffff800) 794 liveins: $w0, $w1 795 796 %2:_(s32) = COPY $w0 797 %0:_(s16) = G_TRUNC %2(s32) 798 %3:_(s32) = COPY $w1 799 %1:_(s16) = G_TRUNC %3(s32) 800 %4:_(s16), %5:_(s1) = G_UADDO %0, %1 801 G_BRCOND %5(s1), %bb.2 802 G_BR %bb.3 803 804 bb.2: 805 successors: 806 807 G_TRAP 808 809 bb.3: 810 %6:_(s32) = G_ANYEXT %4(s16) 811 $w0 = COPY %6(s32) 812 RET_ReallyLR implicit $w0 813 814... 815--- 816name: cannot_fold_branch_to_use_on_overflow 817tracksRegLiveness: true 818body: | 819 ; CHECK-LABEL: name: cannot_fold_branch_to_use_on_overflow 820 ; CHECK: bb.0: 821 ; CHECK-NEXT: successors: %bb.1(0x7ffff800), %bb.2(0x00000800) 822 ; CHECK-NEXT: liveins: $w0, $w1 823 ; CHECK-NEXT: {{ $}} 824 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 825 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16 826 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32) 827 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 828 ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16 829 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32) 830 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]] 831 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true 832 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]] 833 ; CHECK-NEXT: G_BRCOND [[XOR]](s1), %bb.2 834 ; CHECK-NEXT: G_BR %bb.1 835 ; CHECK-NEXT: {{ $}} 836 ; CHECK-NEXT: bb.1: 837 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s16) 838 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32) 839 ; CHECK-NEXT: RET_ReallyLR implicit $w0 840 ; CHECK-NEXT: {{ $}} 841 ; CHECK-NEXT: bb.2: 842 ; CHECK-NEXT: G_TRAP 843 bb.1: 844 successors: %bb.2(0x7ffff800), %bb.3(0x00000800) 845 liveins: $w0, $w1 846 847 %2:_(s32) = COPY $w0 848 %3:_(s32) = G_ASSERT_ZEXT %2, 16 849 %0:_(s16) = G_TRUNC %3(s32) 850 %4:_(s32) = COPY $w1 851 %5:_(s32) = G_ASSERT_ZEXT %4, 16 852 %1:_(s16) = G_TRUNC %5(s32) 853 %6:_(s16), %7:_(s1) = G_UADDO %0, %1 854 G_BRCOND %7(s1), %bb.2 855 G_BR %bb.3 856 857 bb.2: 858 %8:_(s32) = G_ZEXT %6(s16) 859 $w0 = COPY %8(s32) 860 RET_ReallyLR implicit $w0 861 862 bb.3: 863 G_TRAP 864 865... 866