1# RUN: llc -march=amdgcn -mcpu=fiji -run-pass si-pre-emit-peephole -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s 2# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass si-pre-emit-peephole -verify-machineinstrs -o - %s | FileCheck -check-prefix=W32 %s 3 4--- 5# GCN-LABEL: name: and_execz_mov_vccz 6# GCN-NOT: S_MOV_ 7# GCN-NOT: S_AND_ 8# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 9name: and_execz_mov_vccz 10body: | 11 bb.0: 12 S_NOP 0 13 14 bb.1: 15 S_NOP 0 16 17 bb.2: 18 $sgpr0_sgpr1 = S_MOV_B64 -1 19 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 20 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 21 S_ENDPGM 0 22... 23--- 24# GCN-LABEL: name: and_execz_imm_vccz 25# GCN-NOT: S_AND_ 26# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 27name: and_execz_imm_vccz 28body: | 29 bb.0: 30 S_NOP 0 31 32 bb.1: 33 S_NOP 0 34 35 bb.2: 36 $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc 37 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 38 S_ENDPGM 0 39... 40--- 41# GCN-LABEL: name: and_execnz_imm_vccnz 42# GCN-NOT: S_AND_ 43# GCN: S_CBRANCH_EXECNZ %bb.1, implicit $exec 44name: and_execnz_imm_vccnz 45body: | 46 bb.0: 47 S_NOP 0 48 49 bb.1: 50 S_NOP 0 51 52 bb.2: 53 $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc 54 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc 55 S_ENDPGM 0 56... 57--- 58# GCN-LABEL: name: and_execz_imm_vccz_live_scc 59# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 60# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 61name: and_execz_imm_vccz_live_scc 62body: | 63 bb.0: 64 S_NOP 0 65 66 bb.1: 67 S_NOP 0 68 69 bb.2: 70 $vcc = S_AND_B64 $exec, -1, implicit-def $scc 71 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 72 S_ENDPGM 0 73... 74--- 75# GCN-LABEL: name: and_execz_mov_vccz_live_scc 76# GCN-NOT: S_MOV_ 77# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 78# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 79name: and_execz_mov_vccz_live_scc 80body: | 81 bb.0: 82 S_NOP 0 83 84 bb.1: 85 S_NOP 0 86 87 bb.2: 88 $sgpr0_sgpr1 = S_MOV_B64 -1 89 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc 90 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 91 S_ENDPGM 0 92... 93--- 94# GCN-LABEL: name: and_execz_mov_vccz_live_sreg 95# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 96# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 97name: and_execz_mov_vccz_live_sreg 98body: | 99 bb.0: 100 S_NOP 0 101 102 bb.1: 103 S_NOP 0 104 105 bb.2: 106 $sgpr0_sgpr1 = S_MOV_B64 -1 107 $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc 108 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 109 S_ENDPGM 0 110... 111--- 112# GCN-LABEL: name: and_execz_mov_vccz_live_sreg_commute 113# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 114# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 115name: and_execz_mov_vccz_live_sreg_commute 116body: | 117 bb.0: 118 S_NOP 0 119 120 bb.1: 121 S_NOP 0 122 123 bb.2: 124 $sgpr0_sgpr1 = S_MOV_B64 -1 125 $vcc = S_AND_B64 $sgpr0_sgpr1, $exec, implicit-def dead $scc 126 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 127 S_ENDPGM 0 128... 129--- 130# GCN-LABEL: name: and_execz_mov_vccz_live_scc_commute 131# GCN-NOT: S_MOV_ 132# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 133# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 134name: and_execz_mov_vccz_live_scc_commute 135body: | 136 bb.0: 137 S_NOP 0 138 139 bb.1: 140 S_NOP 0 141 142 bb.2: 143 $sgpr0_sgpr1 = S_MOV_B64 -1 144 $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def $scc 145 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 146 S_ENDPGM 0 147... 148--- 149# GCN-LABEL: name: and_execz_mov_vccz_commute 150# GCN-NOT: S_MOV_ 151# GCN-NOT: S_AND_ 152# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 153name: and_execz_mov_vccz_commute 154body: | 155 bb.0: 156 S_NOP 0 157 158 bb.1: 159 S_NOP 0 160 161 bb.2: 162 $sgpr0_sgpr1 = S_MOV_B64 -1 163 $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def dead $scc 164 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 165 S_ENDPGM 0 166... 167--- 168# GCN-LABEL: name: and_execz_mov_exec_vccz 169# GCN: $exec = S_MOV_B64 -1 170# GCN-NEXT: S_ENDPGM 0 171name: and_execz_mov_exec_vccz 172body: | 173 bb.0: 174 S_NOP 0 175 176 bb.1: 177 S_NOP 0 178 179 bb.2: 180 $exec = S_MOV_B64 -1 181 $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc 182 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 183 S_ENDPGM 0 184... 185--- 186# GCN-LABEL: name: and_execz_mov_exec_vccnz 187# GCN: $exec = S_MOV_B64 -1 188# GCN-NEXT: S_BRANCH %bb.1{{$}} 189name: and_execz_mov_exec_vccnz 190body: | 191 bb.0: 192 S_NOP 0 193 194 bb.1: 195 S_NOP 0 196 197 bb.2: 198 $exec = S_MOV_B64 -1 199 $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc 200 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc 201 S_ENDPGM 0 202... 203--- 204# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_early 205# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 206# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1 207# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 208name: and_execz_mov_vccz_reads_sreg_early 209body: | 210 bb.0: 211 S_NOP 0 212 213 bb.1: 214 S_NOP 0 215 216 bb.2: 217 $sgpr0_sgpr1 = S_MOV_B64 -1 218 $sgpr2 = S_MOV_B32 $sgpr1 219 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 220 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 221 S_ENDPGM 0 222... 223--- 224# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_late 225# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 226# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1 227# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 228name: and_execz_mov_vccz_reads_sreg_late 229body: | 230 bb.0: 231 S_NOP 0 232 233 bb.1: 234 S_NOP 0 235 236 bb.2: 237 $sgpr0_sgpr1 = S_MOV_B64 -1 238 $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc 239 $sgpr2 = S_MOV_B32 $sgpr1 240 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 241 S_ENDPGM 0 242... 243# GCN-LABEL: name: and_execz_mov_vccz_reads_writes_sreg_early 244# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 245# GCN-NEXT: $sgpr1 = S_MOV_B32 $sgpr0 246# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 247# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 248name: and_execz_mov_vccz_reads_writes_sreg_early 249body: | 250 bb.0: 251 S_NOP 0 252 253 bb.1: 254 S_NOP 0 255 256 bb.2: 257 $sgpr0_sgpr1 = S_MOV_B64 -1 258 $sgpr1 = S_MOV_B32 $sgpr0 259 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 260 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 261 S_ENDPGM 0 262... 263--- 264# GCN-LABEL: name: and_execz_mov_vccz_reads_cond 265# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc 266# GCN-NEXT: $sgpr2 = S_MOV_B32 $vcc_lo 267# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 268name: and_execz_mov_vccz_reads_cond 269body: | 270 bb.0: 271 S_NOP 0 272 273 bb.1: 274 S_NOP 0 275 276 bb.2: 277 $sgpr0_sgpr1 = S_MOV_B64 -1 278 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 279 $sgpr2 = S_MOV_B32 $vcc_lo 280 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 281 S_ENDPGM 0 282... 283--- 284# GCN-LABEL: name: and_execz_mov_vccz_modifies_sreg 285# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 286# GCN-NEXT: $sgpr0 = S_MOV_B32 0 287# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 288# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 289name: and_execz_mov_vccz_modifies_sreg 290body: | 291 bb.0: 292 S_NOP 0 293 294 bb.1: 295 S_NOP 0 296 297 bb.2: 298 $sgpr0_sgpr1 = S_MOV_B64 -1 299 $sgpr0 = S_MOV_B32 0 300 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 301 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 302 S_ENDPGM 0 303... 304--- 305# GCN-LABEL: name: and_execz_imm_vccz_liveout_scc 306# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 307# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 308# GCN-NEXT: S_ENDPGM 0, implicit $scc 309name: and_execz_imm_vccz_liveout_scc 310body: | 311 bb.0: 312 S_NOP 0 313 314 bb.1: 315 S_NOP 0 316 317 bb.2: 318 $vcc = S_AND_B64 $exec, -1, implicit-def $scc 319 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 320 S_ENDPGM 0, implicit $scc 321... 322--- 323# W32-LABEL: name: and_execz_mov_vccz_w32 324# W32-NOT: S_MOV_ 325# W32-NOT: S_AND_ 326# W32: S_CBRANCH_EXECZ %bb.1, implicit $exec 327name: and_execz_mov_vccz_w32 328body: | 329 bb.0: 330 S_NOP 0 331 332 bb.1: 333 S_NOP 0 334 335 bb.2: 336 $sgpr0 = S_MOV_B32 -1 337 $vcc_lo = S_AND_B32 $exec_lo, killed $sgpr0, implicit-def dead $scc 338 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 339 S_ENDPGM 0 340... 341--- 342# GCN-LABEL: name: andn2_execz_mov_vccz 343# GCN-NOT: S_MOV_ 344# GCN-NOT: S_ANDN2_ 345# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 346name: andn2_execz_mov_vccz 347body: | 348 bb.0: 349 S_NOP 0 350 351 bb.1: 352 S_NOP 0 353 354 bb.2: 355 $sgpr0_sgpr1 = S_MOV_B64 0 356 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 357 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 358 S_ENDPGM 0 359... 360--- 361# GCN-LABEL: name: andn2_branch_mov_vccz 362# GCN-NOT: S_MOV_ 363# GCN-NOT: S_ANDN2_ 364# GCN: S_BRANCH %bb.1 365name: andn2_branch_mov_vccz 366body: | 367 bb.0: 368 S_NOP 0 369 370 bb.1: 371 S_NOP 0 372 373 bb.2: 374 $sgpr0_sgpr1 = S_MOV_B64 -1 375 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 376 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 377 S_ENDPGM 0 378... 379--- 380# GCN-LABEL: name: andn2_execnz_mov_vccnz 381# GCN-NOT: S_MOV_ 382# GCN-NOT: S_ANDN2_ 383# GCN: S_CBRANCH_EXECNZ %bb.1, implicit $exec 384name: andn2_execnz_mov_vccnz 385body: | 386 bb.0: 387 S_NOP 0 388 389 bb.1: 390 S_NOP 0 391 392 bb.2: 393 $sgpr0_sgpr1 = S_MOV_B64 0 394 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 395 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc 396 S_ENDPGM 0 397... 398--- 399# GCN-LABEL: name: andn2_no_branch_mov_vccnz 400# GCN-NOT: S_MOV_ 401# GCN-NOT: S_ANDN2_ 402# GCN-NOT: S_CBRANCH 403# GCN-NOT: S_BRANCH 404name: andn2_no_branch_mov_vccnz 405body: | 406 bb.0: 407 S_NOP 0 408 409 bb.1: 410 S_NOP 0 411 412 bb.2: 413 $sgpr0_sgpr1 = S_MOV_B64 -1 414 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 415 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc 416 S_ENDPGM 0 417... 418--- 419# GCN-LABEL: name: and_0_mov 420# GCN: bb.2: 421# GCN-NOT: S_AND 422# GCN: $vcc = S_MOV_B64 0 423# GCN-NEXT: S_BRANCH %bb.1 424name: and_0_mov 425body: | 426 bb.0: 427 S_NOP 0 428 429 bb.1: 430 S_NOP 0 431 432 bb.2: 433 $sgpr0_sgpr1 = S_MOV_B64 0 434 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 435 S_CBRANCH_VCCZ %bb.1, implicit $vcc 436 S_ENDPGM 0 437... 438--- 439# GCN-LABEL: name: andn2_m1_mov 440# GCN: bb.2: 441# GCN-NOT: S_ANDN2 442# GCN: $vcc = S_MOV_B64 0 443# GCN-NEXT: S_BRANCH %bb.1 444name: andn2_m1_mov 445body: | 446 bb.0: 447 S_NOP 0 448 449 bb.1: 450 S_NOP 0 451 452 bb.2: 453 $sgpr0_sgpr1 = S_MOV_B64 -1 454 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 455 S_CBRANCH_VCCZ %bb.1, implicit $vcc 456 S_ENDPGM 0 457... 458--- 459# GCN-LABEL: name: and_m1_mov 460# GCN: bb.2: 461# GCN-NOT: S_AND 462# GCN: $vcc = S_MOV_B64 $exec 463# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 464name: and_m1_mov 465body: | 466 bb.0: 467 S_NOP 0 468 469 bb.1: 470 S_NOP 0 471 472 bb.2: 473 $sgpr0_sgpr1 = S_MOV_B64 -1 474 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 475 S_CBRANCH_VCCZ %bb.1, implicit $vcc 476 S_ENDPGM 0 477... 478--- 479# GCN-LABEL: name: andn2_0_mov 480# GCN: bb.2: 481# GCN-NOT: S_ANDN2 482# GCN: $vcc = S_MOV_B64 $exec 483# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 484name: andn2_0_mov 485body: | 486 bb.0: 487 S_NOP 0 488 489 bb.1: 490 S_NOP 0 491 492 bb.2: 493 $sgpr0_sgpr1 = S_MOV_B64 0 494 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 495 S_CBRANCH_VCCZ %bb.1, implicit $vcc 496 S_ENDPGM 0 497... 498--- 499# GCN-LABEL: name: and_0_scc_req 500# GCN: bb.2: 501# GCN-NOT: S_MOV_ 502# GCN: S_AND_ 503# GCN-NEXT: S_BRANCH %bb.1 504name: and_0_scc_req 505body: | 506 bb.0: 507 S_NOP 0 508 509 bb.1: 510 S_NOP 0 511 512 bb.2: 513 $sgpr0_sgpr1 = S_MOV_B64 0 514 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc 515 S_CBRANCH_VCCZ %bb.1, implicit $vcc 516 S_ENDPGM 0 517... 518--- 519# GCN-LABEL: name: andn2_m1_scc_req 520# GCN: bb.2: 521# GCN-NOT: S_MOV_ 522# GCN: S_ANDN2_ 523# GCN-NEXT: S_BRANCH %bb.1 524name: andn2_m1_scc_req 525body: | 526 bb.0: 527 S_NOP 0 528 529 bb.1: 530 S_NOP 0 531 532 bb.2: 533 $sgpr0_sgpr1 = S_MOV_B64 -1 534 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc 535 S_CBRANCH_VCCZ %bb.1, implicit $vcc 536 S_ENDPGM 0 537... 538