655 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass si-pre-emit-peephole -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s2# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass si-pre-emit-peephole -verify-machineinstrs -o - %s | FileCheck -check-prefix=W32 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass si-pre-emit-peephole -verify-machineinstrs -o - %s | FileCheck -check-prefix=W32 %s4 5---6# GCN-LABEL: name: and_execz_mov_vccz7# GCN-NOT: S_MOV_8# GCN-NOT: S_AND_9# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec10name: and_execz_mov_vccz11body: |12 bb.0:13 S_NOP 014 15 bb.1:16 S_NOP 017 18 bb.2:19 $sgpr0_sgpr1 = S_MOV_B64 -120 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc21 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc22 S_ENDPGM 023...24---25# GCN-LABEL: name: and_execz_imm_vccz26# GCN-NOT: S_AND_27# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec28name: and_execz_imm_vccz29body: |30 bb.0:31 S_NOP 032 33 bb.1:34 S_NOP 035 36 bb.2:37 $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc38 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc39 S_ENDPGM 040...41---42# GCN-LABEL: name: and_execnz_imm_vccnz43# GCN-NOT: S_AND_44# GCN: S_CBRANCH_EXECNZ %bb.1, implicit $exec45name: and_execnz_imm_vccnz46body: |47 bb.0:48 S_NOP 049 50 bb.1:51 S_NOP 052 53 bb.2:54 $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc55 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc56 S_ENDPGM 057...58---59# GCN-LABEL: name: and_execz_imm_vccz_live_scc60# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc61# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec62name: and_execz_imm_vccz_live_scc63body: |64 bb.0:65 S_NOP 066 67 bb.1:68 S_NOP 069 70 bb.2:71 $vcc = S_AND_B64 $exec, -1, implicit-def $scc72 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc73 S_ENDPGM 074...75---76# GCN-LABEL: name: and_execz_mov_vccz_live_scc77# GCN-NOT: S_MOV_78# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc79# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec80name: and_execz_mov_vccz_live_scc81body: |82 bb.0:83 S_NOP 084 85 bb.1:86 S_NOP 087 88 bb.2:89 $sgpr0_sgpr1 = S_MOV_B64 -190 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc91 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc92 S_ENDPGM 093...94---95# GCN-LABEL: name: and_execz_mov_vccz_live_sreg96# GCN: $sgpr0_sgpr1 = S_MOV_B64 -197# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec98name: and_execz_mov_vccz_live_sreg99body: |100 bb.0:101 S_NOP 0102 103 bb.1:104 S_NOP 0105 106 bb.2:107 $sgpr0_sgpr1 = S_MOV_B64 -1108 $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc109 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc110 S_ENDPGM 0111...112---113# GCN-LABEL: name: and_execz_mov_vccz_live_sreg_commute114# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1115# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec116name: and_execz_mov_vccz_live_sreg_commute117body: |118 bb.0:119 S_NOP 0120 121 bb.1:122 S_NOP 0123 124 bb.2:125 $sgpr0_sgpr1 = S_MOV_B64 -1126 $vcc = S_AND_B64 $sgpr0_sgpr1, $exec, implicit-def dead $scc127 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc128 S_ENDPGM 0129...130---131# GCN-LABEL: name: and_execz_mov_vccz_live_scc_commute132# GCN-NOT: S_MOV_133# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc134# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec135name: and_execz_mov_vccz_live_scc_commute136body: |137 bb.0:138 S_NOP 0139 140 bb.1:141 S_NOP 0142 143 bb.2:144 $sgpr0_sgpr1 = S_MOV_B64 -1145 $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def $scc146 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc147 S_ENDPGM 0148...149---150# GCN-LABEL: name: and_execz_mov_vccz_commute151# GCN-NOT: S_MOV_152# GCN-NOT: S_AND_153# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec154name: and_execz_mov_vccz_commute155body: |156 bb.0:157 S_NOP 0158 159 bb.1:160 S_NOP 0161 162 bb.2:163 $sgpr0_sgpr1 = S_MOV_B64 -1164 $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def dead $scc165 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc166 S_ENDPGM 0167...168---169# GCN-LABEL: name: and_execz_mov_exec_vccz170# GCN: $exec = S_MOV_B64 -1171# GCN-NEXT: S_ENDPGM 0172name: and_execz_mov_exec_vccz173body: |174 bb.0:175 S_NOP 0176 177 bb.1:178 S_NOP 0179 180 bb.2:181 $exec = S_MOV_B64 -1182 $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc183 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc184 S_ENDPGM 0185...186---187# GCN-LABEL: name: and_execz_mov_exec_vccnz188# GCN: $exec = S_MOV_B64 -1189# GCN-NEXT: S_BRANCH %bb.1{{$}}190name: and_execz_mov_exec_vccnz191body: |192 bb.0:193 S_NOP 0194 195 bb.1:196 S_NOP 0197 198 bb.2:199 $exec = S_MOV_B64 -1200 $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc201 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc202 S_ENDPGM 0203...204---205# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_early206# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1207# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1208# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec209name: and_execz_mov_vccz_reads_sreg_early210body: |211 bb.0:212 S_NOP 0213 214 bb.1:215 S_NOP 0216 217 bb.2:218 $sgpr0_sgpr1 = S_MOV_B64 -1219 $sgpr2 = S_MOV_B32 $sgpr1220 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc221 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc222 S_ENDPGM 0223...224---225# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_late226# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1227# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1228# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec229name: and_execz_mov_vccz_reads_sreg_late230body: |231 bb.0:232 S_NOP 0233 234 bb.1:235 S_NOP 0236 237 bb.2:238 $sgpr0_sgpr1 = S_MOV_B64 -1239 $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc240 $sgpr2 = S_MOV_B32 $sgpr1241 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc242 S_ENDPGM 0243...244# GCN-LABEL: name: and_execz_mov_vccz_reads_writes_sreg_early245# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1246# GCN-NEXT: $sgpr1 = S_MOV_B32 $sgpr0247# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc248# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc249name: and_execz_mov_vccz_reads_writes_sreg_early250body: |251 bb.0:252 S_NOP 0253 254 bb.1:255 S_NOP 0256 257 bb.2:258 $sgpr0_sgpr1 = S_MOV_B64 -1259 $sgpr1 = S_MOV_B32 $sgpr0260 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc261 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc262 S_ENDPGM 0263...264---265# GCN-LABEL: name: and_execz_mov_vccz_reads_cond266# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc267# GCN-NEXT: $sgpr2 = S_MOV_B32 $vcc_lo268# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec269name: and_execz_mov_vccz_reads_cond270body: |271 bb.0:272 S_NOP 0273 274 bb.1:275 S_NOP 0276 277 bb.2:278 $sgpr0_sgpr1 = S_MOV_B64 -1279 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc280 $sgpr2 = S_MOV_B32 $vcc_lo281 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc282 S_ENDPGM 0283...284---285# GCN-LABEL: name: and_execz_mov_vccz_modifies_sreg286# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1287# GCN-NEXT: $sgpr0 = S_MOV_B32 0288# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc289# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc290name: and_execz_mov_vccz_modifies_sreg291body: |292 bb.0:293 S_NOP 0294 295 bb.1:296 S_NOP 0297 298 bb.2:299 $sgpr0_sgpr1 = S_MOV_B64 -1300 $sgpr0 = S_MOV_B32 0301 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc302 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc303 S_ENDPGM 0304...305---306# GCN-LABEL: name: and_execz_imm_vccz_liveout_scc307# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc308# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec309# GCN-NEXT: S_ENDPGM 0, implicit $scc310name: and_execz_imm_vccz_liveout_scc311body: |312 bb.0:313 S_NOP 0314 315 bb.1:316 S_NOP 0317 318 bb.2:319 $vcc = S_AND_B64 $exec, -1, implicit-def $scc320 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc321 S_ENDPGM 0, implicit $scc322...323---324# W32-LABEL: name: and_execz_mov_vccz_w32325# W32-NOT: S_MOV_326# W32-NOT: S_AND_327# W32: S_CBRANCH_EXECZ %bb.1, implicit $exec328name: and_execz_mov_vccz_w32329body: |330 bb.0:331 S_NOP 0332 333 bb.1:334 S_NOP 0335 336 bb.2:337 $sgpr0 = S_MOV_B32 -1338 $vcc_lo = S_AND_B32 $exec_lo, killed $sgpr0, implicit-def dead $scc339 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc340 S_ENDPGM 0341...342---343# GCN-LABEL: name: andn2_execz_mov_vccz344# GCN-NOT: S_MOV_345# GCN-NOT: S_ANDN2_346# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec347name: andn2_execz_mov_vccz348body: |349 bb.0:350 S_NOP 0351 352 bb.1:353 S_NOP 0354 355 bb.2:356 $sgpr0_sgpr1 = S_MOV_B64 0357 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc358 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc359 S_ENDPGM 0360...361---362# GCN-LABEL: name: andn2_branch_mov_vccz363# GCN-NOT: S_MOV_364# GCN-NOT: S_ANDN2_365# GCN: S_BRANCH %bb.1366name: andn2_branch_mov_vccz367body: |368 bb.0:369 S_NOP 0370 371 bb.1:372 S_NOP 0373 374 bb.2:375 $sgpr0_sgpr1 = S_MOV_B64 -1376 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc377 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc378 S_ENDPGM 0379...380---381# GCN-LABEL: name: andn2_execnz_mov_vccnz382# GCN-NOT: S_MOV_383# GCN-NOT: S_ANDN2_384# GCN: S_CBRANCH_EXECNZ %bb.1, implicit $exec385name: andn2_execnz_mov_vccnz386body: |387 bb.0:388 S_NOP 0389 390 bb.1:391 S_NOP 0392 393 bb.2:394 $sgpr0_sgpr1 = S_MOV_B64 0395 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc396 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc397 S_ENDPGM 0398...399---400# GCN-LABEL: name: andn2_no_branch_mov_vccnz401# GCN-NOT: S_MOV_402# GCN-NOT: S_ANDN2_403# GCN-NOT: S_CBRANCH404# GCN-NOT: S_BRANCH405name: andn2_no_branch_mov_vccnz406body: |407 bb.0:408 S_NOP 0409 410 bb.1:411 S_NOP 0412 413 bb.2:414 $sgpr0_sgpr1 = S_MOV_B64 -1415 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc416 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc417 S_ENDPGM 0418...419---420# GCN-LABEL: name: and_0_mov421# GCN: bb.2:422# GCN-NOT: S_AND423# GCN: $vcc = S_MOV_B64 0424# GCN-NEXT: S_BRANCH %bb.1425name: and_0_mov426body: |427 bb.0:428 S_NOP 0429 430 bb.1:431 S_NOP 0432 433 bb.2:434 $sgpr0_sgpr1 = S_MOV_B64 0435 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc436 S_CBRANCH_VCCZ %bb.1, implicit $vcc437 S_ENDPGM 0438...439---440# GCN-LABEL: name: andn2_m1_mov441# GCN: bb.2:442# GCN-NOT: S_ANDN2443# GCN: $vcc = S_MOV_B64 0444# GCN-NEXT: S_BRANCH %bb.1445name: andn2_m1_mov446body: |447 bb.0:448 S_NOP 0449 450 bb.1:451 S_NOP 0452 453 bb.2:454 $sgpr0_sgpr1 = S_MOV_B64 -1455 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc456 S_CBRANCH_VCCZ %bb.1, implicit $vcc457 S_ENDPGM 0458...459---460# GCN-LABEL: name: and_m1_mov461# GCN: bb.2:462# GCN-NOT: S_AND463# GCN: $vcc = S_MOV_B64 $exec464# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec465name: and_m1_mov466body: |467 bb.0:468 S_NOP 0469 470 bb.1:471 S_NOP 0472 473 bb.2:474 $sgpr0_sgpr1 = S_MOV_B64 -1475 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc476 S_CBRANCH_VCCZ %bb.1, implicit $vcc477 S_ENDPGM 0478...479---480# GCN-LABEL: name: andn2_0_mov481# GCN: bb.2:482# GCN-NOT: S_ANDN2483# GCN: $vcc = S_MOV_B64 $exec484# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec485name: andn2_0_mov486body: |487 bb.0:488 S_NOP 0489 490 bb.1:491 S_NOP 0492 493 bb.2:494 $sgpr0_sgpr1 = S_MOV_B64 0495 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc496 S_CBRANCH_VCCZ %bb.1, implicit $vcc497 S_ENDPGM 0498...499---500# GCN-LABEL: name: and_0_scc_req501# GCN: bb.2:502# GCN-NOT: S_MOV_503# GCN: S_AND_504# GCN-NEXT: S_BRANCH %bb.1505name: and_0_scc_req506body: |507 bb.0:508 S_NOP 0509 510 bb.1:511 S_NOP 0512 513 bb.2:514 $sgpr0_sgpr1 = S_MOV_B64 0515 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc516 S_CBRANCH_VCCZ %bb.1, implicit $vcc517 S_ENDPGM 0518...519---520# GCN-LABEL: name: andn2_m1_scc_req521# GCN: bb.2:522# GCN-NOT: S_MOV_523# GCN: S_ANDN2_524# GCN-NEXT: S_BRANCH %bb.1525name: andn2_m1_scc_req526body: |527 bb.0:528 S_NOP 0529 530 bb.1:531 S_NOP 0532 533 bb.2:534 $sgpr0_sgpr1 = S_MOV_B64 -1535 $vcc = S_ANDN2_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc536 S_CBRANCH_VCCZ %bb.1, implicit $vcc537 S_ENDPGM 0538...539---540# GCN-LABEL: name: and_cmp_vccz541# GCN: V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec542# GCN-NOT: S_AND_543# GCN: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc544name: and_cmp_vccz545body: |546 bb.0:547 S_NOP 0548 549 bb.1:550 S_NOP 0551 552 bb.2:553 V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec554 $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc555 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc556 S_ENDPGM 0557...558---559# GCN-LABEL: name: and_cmp_vccnz560# GCN: V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec561# GCN-NOT: S_AND_562# GCN: S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc563name: and_cmp_vccnz564body: |565 bb.0:566 S_NOP 0567 568 bb.1:569 S_NOP 0570 571 bb.2:572 V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec573 $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc574 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc575 S_ENDPGM 0576...577---578# GCN-LABEL: name: andn2_cmp_vccz579# GCN: V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec580# GCN: $vcc = S_ANDN2_B64 $exec, $vcc, implicit-def dead $scc581# GCN: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc582name: andn2_cmp_vccz583body: |584 bb.0:585 S_NOP 0586 587 bb.1:588 S_NOP 0589 590 bb.2:591 V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec592 $vcc = S_ANDN2_B64 $exec, $vcc, implicit-def dead $scc593 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc594 S_ENDPGM 0595...596---597# GCN-LABEL: name: and_cmpclass_vccz598# GCN: V_CMP_CLASS_F32_e32 killed $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec599# GCN-NOT: S_AND_600# GCN: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc601name: and_cmpclass_vccz602body: |603 bb.0:604 S_NOP 0605 606 bb.1:607 S_NOP 0608 609 bb.2:610 V_CMP_CLASS_F32_e32 killed $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec611 $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc612 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc613 S_ENDPGM 0614...615---616# GCN-LABEL: name: and_cmpx_vccz617# GCN: V_CMPX_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit-def $exec, implicit $exec618# GCN-NOT: S_AND_619# GCN: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc620name: and_cmpx_vccz621body: |622 bb.0:623 S_NOP 0624 625 bb.1:626 S_NOP 0627 628 bb.2:629 V_CMPX_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit-def $exec, implicit $exec630 $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc631 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc632 S_ENDPGM 0633...634---635# GCN-LABEL: name: and_or_cmp_vccz636# GCN: V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec637# GCN: $exec = S_OR_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc638# GCN: $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc639# GCN: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc640name: and_or_cmp_vccz641body: |642 bb.0:643 S_NOP 0644 645 bb.1:646 S_NOP 0647 648 bb.2:649 V_CMP_EQ_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec650 $exec = S_OR_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc651 $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc652 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc653 S_ENDPGM 0654...655