1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -mtriple=aarch64-unknown-unknown -verify-machineinstrs -global-isel-abort=1 -run-pass=legalizer %s -o - | FileCheck %s 3--- 4name: legalize_phi 5alignment: 4 6exposesReturnsTwice: false 7legalized: false 8regBankSelected: false 9selected: false 10tracksRegLiveness: true 11registers: 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_phi 26 ; CHECK: bb.0: 27 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 28 ; CHECK: liveins: $w0 29 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 30 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 31 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 32 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 33 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]] 34 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 35 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1 36 ; CHECK: G_BR %bb.2 37 ; CHECK: bb.1: 38 ; CHECK: successors: %bb.3(0x80000000) 39 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]] 40 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32) 41 ; CHECK: G_BR %bb.3 42 ; CHECK: bb.2: 43 ; CHECK: successors: %bb.3(0x80000000) 44 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]] 45 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32) 46 ; CHECK: bb.3: 47 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC2]](s16), %bb.2 48 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 49 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16) 50 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]] 51 ; CHECK: $w0 = COPY [[AND]](s32) 52 ; CHECK: RET_ReallyLR implicit $w0 53 bb.0: 54 ; Test that we insert legalization artifacts(Truncs here) into the correct BBs 55 ; while legalizing the G_PHI to s16. 56 57 58 successors: %bb.1(0x40000000), %bb.2(0x40000000) 59 liveins: $w0 60 61 %0(s32) = COPY $w0 62 %1(s32) = G_CONSTANT i32 0 63 %3(s32) = G_CONSTANT i32 1 64 %6(s32) = G_CONSTANT i32 2 65 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1 66 G_BRCOND %2(s1), %bb.1 67 G_BR %bb.2 68 69 bb.1: 70 successors: %bb.3(0x80000000) 71 72 %4(s32) = G_ADD %0, %3 73 %5(s1) = G_TRUNC %4(s32) 74 G_BR %bb.3 75 76 bb.2: 77 successors: %bb.3(0x80000000) 78 79 %7(s32) = G_ADD %0, %6 80 %8(s1) = G_TRUNC %7(s32) 81 82 bb.3: 83 %9(s1) = G_PHI %5(s1), %bb.1, %8(s1), %bb.2 84 %11:_(s1) = G_PHI %5(s1), %bb.1, %8(s1), %bb.2 85 %10(s32) = G_ZEXT %9(s1) 86 $w0 = COPY %10(s32) 87 RET_ReallyLR implicit $w0 88 89... 90--- 91name: legalize_phi_ptr 92alignment: 4 93exposesReturnsTwice: false 94legalized: false 95regBankSelected: false 96selected: false 97tracksRegLiveness: true 98registers: 99 - { id: 0, class: _, preferred-register: '' } 100 - { id: 1, class: _, preferred-register: '' } 101 - { id: 2, class: _, preferred-register: '' } 102 - { id: 3, class: _, preferred-register: '' } 103 - { id: 4, class: _, preferred-register: '' } 104 - { id: 5, class: _, preferred-register: '' } 105liveins: 106body: | 107 ; CHECK-LABEL: name: legalize_phi_ptr 108 ; CHECK: bb.0: 109 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 110 ; CHECK: liveins: $w2, $x0, $x1 111 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 112 ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1 113 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2 114 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY2]](s32) 115 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1 116 ; CHECK: G_BR %bb.2 117 ; CHECK: bb.1: 118 ; CHECK: successors: %bb.2(0x80000000) 119 ; CHECK: bb.2: 120 ; CHECK: [[PHI:%[0-9]+]]:_(p0) = G_PHI [[COPY]](p0), %bb.0, [[COPY1]](p0), %bb.1 121 ; CHECK: $x0 = COPY [[PHI]](p0) 122 ; CHECK: RET_ReallyLR implicit $x0 123 bb.1: 124 125 successors: %bb.2, %bb.3 126 liveins: $w2, $x0, $x1 127 128 %0(p0) = COPY $x0 129 %1(p0) = COPY $x1 130 %4(s32) = COPY $w2 131 %2(s1) = G_TRUNC %4(s32) 132 G_BRCOND %2(s1), %bb.2 133 G_BR %bb.3 134 135 bb.2: 136 successors: %bb.3 137 138 bb.3: 139 %3(p0) = G_PHI %0(p0), %bb.1, %1(p0), %bb.2 140 $x0 = COPY %3(p0) 141 RET_ReallyLR implicit $x0 142 143... 144--- 145name: legalize_phi_empty 146alignment: 4 147exposesReturnsTwice: false 148legalized: false 149regBankSelected: false 150selected: false 151tracksRegLiveness: true 152registers: 153 - { id: 0, class: _, preferred-register: '' } 154 - { id: 1, class: _, preferred-register: '' } 155 - { id: 2, class: _, preferred-register: '' } 156 - { id: 3, class: _, preferred-register: '' } 157 - { id: 4, class: _, preferred-register: '' } 158 - { id: 5, class: _, preferred-register: '' } 159 - { id: 6, class: _, preferred-register: '' } 160 - { id: 7, class: _, preferred-register: '' } 161 - { id: 8, class: _, preferred-register: '' } 162 - { id: 9, class: _, preferred-register: '' } 163 - { id: 10, class: _, preferred-register: '' } 164liveins: 165body: | 166 ; CHECK-LABEL: name: legalize_phi_empty 167 ; CHECK: bb.0: 168 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 169 ; CHECK: liveins: $w0 170 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 171 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 172 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3 173 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 174 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]] 175 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 176 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]] 177 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1 178 ; CHECK: G_BR %bb.2 179 ; CHECK: bb.1: 180 ; CHECK: successors: %bb.3(0x80000000) 181 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]] 182 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32) 183 ; CHECK: G_BR %bb.3 184 ; CHECK: bb.2: 185 ; CHECK: successors: %bb.3(0x80000000) 186 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32) 187 ; CHECK: bb.3: 188 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC2]](s16), %bb.2 189 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 190 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16) 191 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]] 192 ; CHECK: $w0 = COPY [[AND]](s32) 193 ; CHECK: RET_ReallyLR implicit $w0 194 bb.0: 195 successors: %bb.1(0x40000000), %bb.2(0x40000000) 196 liveins: $w0 197 ; Test that we properly legalize a phi with a predecessor that's empty 198 199 200 201 202 %0(s32) = COPY $w0 203 %1(s32) = G_CONSTANT i32 0 204 %3(s32) = G_CONSTANT i32 3 205 %6(s32) = G_CONSTANT i32 1 206 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1 207 %4(s32) = G_ADD %0, %3 208 %5(s1) = G_TRUNC %4(s32) 209 G_BRCOND %2(s1), %bb.1 210 G_BR %bb.2 211 212 bb.1: 213 successors: %bb.3(0x80000000) 214 215 %7(s32) = G_ADD %0, %6 216 %8(s1) = G_TRUNC %7(s32) 217 G_BR %bb.3 218 219 bb.2: 220 successors: %bb.3(0x80000000) 221 222 223 bb.3: 224 %9(s1) = G_PHI %8(s1), %bb.1, %5(s1), %bb.2 225 %10(s32) = G_ZEXT %9(s1) 226 $w0 = COPY %10(s32) 227 RET_ReallyLR implicit $w0 228 229... 230--- 231name: legalize_phi_loop 232alignment: 4 233exposesReturnsTwice: false 234legalized: false 235regBankSelected: false 236selected: false 237tracksRegLiveness: true 238registers: 239 - { id: 0, class: _, preferred-register: '' } 240 - { id: 1, class: _, preferred-register: '' } 241 - { id: 2, class: _, preferred-register: '' } 242 - { id: 3, class: _, preferred-register: '' } 243 - { id: 4, class: _, preferred-register: '' } 244 - { id: 5, class: _, preferred-register: '' } 245 - { id: 6, class: _, preferred-register: '' } 246 - { id: 7, class: _, preferred-register: '' } 247liveins: 248body: | 249 ; CHECK-LABEL: name: legalize_phi_loop 250 ; CHECK: bb.0: 251 ; CHECK: successors: %bb.1(0x80000000) 252 ; CHECK: liveins: $w0 253 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 254 ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0 255 ; CHECK: bb.1: 256 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 257 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[C]](s16), %bb.0, %13(s16), %bb.1 258 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16) 259 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 260 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ANYEXT]], [[C1]] 261 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 262 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[ADD]](s32) 263 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 264 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]] 265 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 266 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32) 267 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1 268 ; CHECK: bb.2: 269 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 270 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ADD]](s32) 271 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 272 ; CHECK: $w0 = COPY [[AND1]](s32) 273 ; CHECK: RET_ReallyLR implicit $w0 274 bb.0: 275 successors: %bb.1(0x80000000) 276 liveins: $w0 277 ; Test that we properly legalize a phi that uses a value from the same BB 278 279 %0(s32) = COPY $w0 280 %2(s8) = G_CONSTANT i8 1 281 %7(s8) = G_CONSTANT i8 0 282 283 bb.1: 284 successors: %bb.1(0x40000000), %bb.3(0x40000000) 285 286 %1(s8) = G_PHI %7(s8), %bb.0, %3(s8), %bb.1 287 %3(s8) = G_ADD %1, %2 288 %4(s32) = G_ZEXT %3(s8) 289 %5(s1) = G_ICMP intpred(ugt), %4(s32), %0 290 G_BRCOND %5(s1), %bb.1 291 292 bb.3: 293 %6(s32) = G_ZEXT %3(s8) 294 $w0 = COPY %6(s32) 295 RET_ReallyLR implicit $w0 296 297... 298--- 299name: legalize_phi_cycle 300alignment: 4 301exposesReturnsTwice: false 302legalized: false 303regBankSelected: false 304selected: false 305tracksRegLiveness: true 306registers: 307 - { id: 0, class: _, preferred-register: '' } 308 - { id: 1, class: _, preferred-register: '' } 309 - { id: 2, class: _, preferred-register: '' } 310 - { id: 3, class: _, preferred-register: '' } 311 - { id: 4, class: _, preferred-register: '' } 312liveins: 313body: | 314 ; CHECK-LABEL: name: legalize_phi_cycle 315 ; CHECK: bb.0: 316 ; CHECK: successors: %bb.1(0x80000000) 317 ; CHECK: liveins: $w0 318 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 319 ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0 320 ; CHECK: bb.1: 321 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 322 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[C]](s16), %bb.0, %7(s16), %bb.1 323 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 324 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16) 325 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C1]] 326 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]] 327 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 328 ; CHECK: [[COPY1:%[0-9]+]]:_(s16) = COPY [[PHI]](s16) 329 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1 330 ; CHECK: bb.2: 331 ; CHECK: $w0 = COPY [[AND]](s32) 332 ; CHECK: RET_ReallyLR implicit $w0 333 bb.0: 334 successors: %bb.1(0x80000000) 335 liveins: $w0 336 ; Test that we properly legalize a phi that uses itself 337 338 339 %0(s32) = COPY $w0 340 %4(s8) = G_CONSTANT i8 0 341 342 bb.1: 343 successors: %bb.1(0x40000000), %bb.3(0x40000000) 344 345 %1(s8) = G_PHI %4(s8), %bb.0, %1(s8), %bb.1 346 %2(s32) = G_ZEXT %1(s8) 347 %3(s1) = G_ICMP intpred(ugt), %2(s32), %0 348 G_BRCOND %3(s1), %bb.1 349 350 bb.3: 351 $w0 = COPY %2(s32) 352 RET_ReallyLR implicit $w0 353 354... 355--- 356name: legalize_phi_same_bb 357alignment: 4 358exposesReturnsTwice: false 359legalized: false 360regBankSelected: false 361selected: false 362tracksRegLiveness: true 363registers: 364 - { id: 0, class: _, preferred-register: '' } 365 - { id: 1, class: _, preferred-register: '' } 366 - { id: 2, class: _, preferred-register: '' } 367 - { id: 3, class: _, preferred-register: '' } 368 - { id: 4, class: _, preferred-register: '' } 369 - { id: 5, class: _, preferred-register: '' } 370 - { id: 6, class: _, preferred-register: '' } 371 - { id: 7, class: _, preferred-register: '' } 372 - { id: 8, class: _, preferred-register: '' } 373 - { id: 9, class: _, preferred-register: '' } 374 - { id: 10, class: _, preferred-register: '' } 375 - { id: 11, class: _, preferred-register: '' } 376 - { id: 12, class: _, preferred-register: '' } 377 - { id: 13, class: _, preferred-register: '' } 378 - { id: 14, class: _, preferred-register: '' } 379liveins: 380body: | 381 ; CHECK-LABEL: name: legalize_phi_same_bb 382 ; CHECK: bb.0: 383 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 384 ; CHECK: liveins: $w0 385 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 386 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 387 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3 388 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 389 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]] 390 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 391 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]] 392 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1 393 ; CHECK: G_BR %bb.2 394 ; CHECK: bb.1: 395 ; CHECK: successors: %bb.3(0x80000000) 396 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]] 397 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32) 398 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32) 399 ; CHECK: G_BR %bb.3 400 ; CHECK: bb.2: 401 ; CHECK: successors: %bb.3(0x80000000) 402 ; CHECK: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 42 403 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32) 404 ; CHECK: bb.3: 405 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC2]](s16), %bb.1, [[TRUNC3]](s16), %bb.2 406 ; CHECK: [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[C3]](s16), %bb.2 407 ; CHECK: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 408 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16) 409 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C4]] 410 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16) 411 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C4]] 412 ; CHECK: [[ADD2:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[AND1]] 413 ; CHECK: $w0 = COPY [[ADD2]](s32) 414 ; CHECK: RET_ReallyLR implicit $w0 415 bb.0: 416 successors: %bb.1(0x40000000), %bb.2(0x40000000) 417 liveins: $w0 418 ; Make sure that we correctly insert the new legalized G_PHI at the 419 ; correct location (ie make sure G_PHIs are the first insts in the BB). 420 421 422 423 424 %0(s32) = COPY $w0 425 %1(s32) = G_CONSTANT i32 0 426 %3(s32) = G_CONSTANT i32 3 427 %6(s32) = G_CONSTANT i32 1 428 %14(s8) = G_CONSTANT i8 42 429 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1 430 %4(s32) = G_ADD %0, %3 431 %5(s8) = G_TRUNC %4(s32) 432 G_BRCOND %2(s1), %bb.1 433 G_BR %bb.2 434 435 bb.1: 436 successors: %bb.3(0x80000000) 437 438 %7(s32) = G_ADD %0, %6 439 %8(s8) = G_TRUNC %7(s32) 440 G_BR %bb.3 441 442 bb.2: 443 successors: %bb.3(0x80000000) 444 445 446 bb.3: 447 %9(s8) = G_PHI %8(s8), %bb.1, %5(s8), %bb.2 448 %10(s8) = G_PHI %8(s8), %bb.1, %14(s8), %bb.2 449 %11(s32) = G_ZEXT %9(s8) 450 %12(s32) = G_ZEXT %10(s8) 451 %13(s32) = G_ADD %11, %12 452 $w0 = COPY %13(s32) 453 RET_ReallyLR implicit $w0 454 455... 456--- 457name: legalize_phi_diff_bb 458alignment: 4 459exposesReturnsTwice: false 460legalized: false 461regBankSelected: false 462selected: false 463tracksRegLiveness: true 464registers: 465 - { id: 0, class: _, preferred-register: '' } 466 - { id: 1, class: _, preferred-register: '' } 467 - { id: 2, class: _, preferred-register: '' } 468 - { id: 3, class: _, preferred-register: '' } 469 - { id: 4, class: _, preferred-register: '' } 470 - { id: 5, class: _, preferred-register: '' } 471 - { id: 6, class: _, preferred-register: '' } 472 - { id: 7, class: _, preferred-register: '' } 473 - { id: 8, class: _, preferred-register: '' } 474 - { id: 9, class: _, preferred-register: '' } 475 - { id: 10, class: _, preferred-register: '' } 476 - { id: 11, class: _, preferred-register: '' } 477 - { id: 12, class: _, preferred-register: '' } 478 - { id: 13, class: _, preferred-register: '' } 479 - { id: 14, class: _, preferred-register: '' } 480 - { id: 15, class: _, preferred-register: '' } 481liveins: 482body: | 483 ; CHECK-LABEL: name: legalize_phi_diff_bb 484 ; CHECK: bb.0: 485 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 486 ; CHECK: liveins: $w0, $w1 487 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 488 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 489 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 490 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3 491 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 492 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 44 493 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]] 494 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 495 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]] 496 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32) 497 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32) 498 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1 499 ; CHECK: G_BR %bb.2 500 ; CHECK: bb.1: 501 ; CHECK: successors: %bb.2(0x40000000), %bb.1(0x40000000) 502 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC2]](s16), %bb.0, %21(s16), %bb.1 503 ; CHECK: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 504 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16) 505 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C4]] 506 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[C2]] 507 ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[ADD1]](s32), [[C3]] 508 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32) 509 ; CHECK: [[COPY2:%[0-9]+]]:_(s16) = COPY [[PHI]](s16) 510 ; CHECK: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 43 511 ; CHECK: G_BRCOND [[TRUNC3]](s1), %bb.2 512 ; CHECK: G_BR %bb.1 513 ; CHECK: bb.2: 514 ; CHECK: [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[COPY2]](s16), %bb.1, [[TRUNC1]](s16), %bb.0 515 ; CHECK: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 516 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16) 517 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C6]] 518 ; CHECK: $w0 = COPY [[AND1]](s32) 519 ; CHECK: RET_ReallyLR implicit $w0 520 bb.0: 521 successors: %bb.1(0x40000000), %bb.3(0x40000000) 522 liveins: $w0, $w1 523 ; Make sure that we correctly legalize PHIs sharing common defs 524 ; in different BBs. 525 526 527 528 %0(s32) = COPY $w0 529 %1(s32) = COPY $w1 530 %2(s32) = G_CONSTANT i32 0 531 %4(s32) = G_CONSTANT i32 3 532 %9(s32) = G_CONSTANT i32 1 533 %11(s32) = G_CONSTANT i32 44 534 %15(s8) = G_CONSTANT i8 43 535 %3(s1) = G_ICMP intpred(ugt), %0(s32), %2 536 %5(s32) = G_ADD %0, %4 537 %6(s8) = G_TRUNC %5(s32) 538 G_BRCOND %3(s1), %bb.1 539 G_BR %bb.3 540 541 bb.1: 542 successors: %bb.3(0x40000000), %bb.1(0x40000000) 543 544 %7(s8) = G_PHI %6(s8), %bb.0, %15(s8), %bb.1 545 %8(s32) = G_ZEXT %7(s8) 546 %10(s32) = G_ADD %8, %9 547 %12(s1) = G_ICMP intpred(ugt), %10(s32), %11 548 G_BRCOND %12(s1), %bb.3 549 G_BR %bb.1 550 551 bb.3: 552 %13(s8) = G_PHI %7(s8), %bb.1, %6(s8), %bb.0 553 %14(s32) = G_ZEXT %13(s8) 554 $w0 = COPY %14(s32) 555 RET_ReallyLR implicit $w0 556 557... 558--- 559name: legalize_phi_check_insertpt 560alignment: 4 561exposesReturnsTwice: false 562legalized: false 563regBankSelected: false 564selected: false 565tracksRegLiveness: true 566body: | 567 ; CHECK-LABEL: name: legalize_phi_check_insertpt 568 ; CHECK: bb.0: 569 ; CHECK: successors: %bb.1(0x80000000) 570 ; CHECK: liveins: $x0, $x1 571 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 572 ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1 573 ; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF 574 ; CHECK: G_BR %bb.1 575 ; CHECK: bb.1: 576 ; CHECK: [[PHI:%[0-9]+]]:_(s64) = G_PHI [[DEF]](s64), %bb.0 577 ; CHECK: [[PHI1:%[0-9]+]]:_(s64) = G_PHI [[DEF]](s64), %bb.0 578 ; CHECK: [[PHI2:%[0-9]+]]:_(s64) = G_PHI [[COPY]](s64), %bb.0 579 ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[PHI]](s64), [[PHI1]](s64) 580 ; CHECK: G_STORE [[MV]](s128), [[COPY1]](p0) :: (store 16) 581 ; CHECK: G_STORE [[PHI2]](s64), [[COPY1]](p0) :: (store 8) 582 ; CHECK: RET_ReallyLR 583 ; Check that the G_MERGE here gets inserted after all the PHIs. 584 bb.0: 585 successors: %bb.1(0x40000000) 586 liveins: $x0, $x1 587 588 %0:_(s64) = COPY $x0 589 %1:_(p0) = COPY $x1 590 %2:_(s128) = G_IMPLICIT_DEF 591 G_BR %bb.1 592 593 bb.1: 594 %3:_(s128) = G_PHI %2(s128), %bb.0 595 %4:_(s64) = G_PHI %0(s64), %bb.0 596 G_STORE %3(s128), %1(p0) :: (store 16) 597 G_STORE %4(s64), %1(p0) :: (store 8) 598 RET_ReallyLR 599 600... 601--- 602name: legalize_phi_vector 603tracksRegLiveness: true 604body: | 605 ; CHECK-LABEL: name: legalize_phi_vector 606 ; CHECK: bb.0: 607 ; CHECK: successors: %bb.1(0x80000000) 608 ; CHECK: liveins: $q0, $x1 609 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0 610 ; CHECK: G_BR %bb.1 611 ; CHECK: bb.1: 612 ; CHECK: [[PHI:%[0-9]+]]:_(<16 x s8>) = G_PHI [[COPY]](<16 x s8>), %bb.0 613 ; CHECK: $q0 = COPY [[PHI]](<16 x s8>) 614 ; CHECK: RET_ReallyLR 615 bb.0: 616 successors: %bb.1 617 liveins: $q0, $x1 618 619 %0:_(<16 x s8>) = COPY $q0 620 G_BR %bb.1 621 622 bb.1: 623 %3:_(<16 x s8>) = G_PHI %0(<16 x s8>), %bb.0 624 $q0 = COPY %3(<16 x s8>) 625 RET_ReallyLR 626... 627