brintos

brintos / llvm-project-archived public Read only

0
0
Text · 35.1 KiB · b278bfc Raw
1004 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -verify-machineinstrs -run-pass=si-lower-control-flow -amdgpu-remove-redundant-endcf %s -o - | FileCheck -check-prefix=GCN %s3# RUN: llc -mtriple=amdgcn -passes=si-lower-control-flow -amdgpu-remove-redundant-endcf %s -o - | FileCheck -check-prefix=GCN %s4 5# Make sure dbg_value doesn't change codeegn when collapsing end_cf6---7name: simple_nested_if_dbg_value8tracksRegLiveness: true9machineFunctionInfo:10  isEntryFunction: true11body:             |12  ; GCN-LABEL: name: simple_nested_if_dbg_value13  ; GCN: bb.0:14  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)15  ; GCN-NEXT: {{  $}}16  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec17  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc18  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]19  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec20  ; GCN-NEXT: {{  $}}21  ; GCN-NEXT: bb.1:22  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.4(0x40000000)23  ; GCN-NEXT: {{  $}}24  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec25  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc26  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]27  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec28  ; GCN-NEXT: {{  $}}29  ; GCN-NEXT: bb.2:30  ; GCN-NEXT:   successors: %bb.4(0x80000000)31  ; GCN-NEXT: {{  $}}32  ; GCN-NEXT: bb.4:33  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc34  ; GCN-NEXT:   DBG_VALUE35  ; GCN-NEXT:   S_ENDPGM 036  bb.0:37    successors: %bb.1, %bb.438 39    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec40 41  bb.1:42    successors: %bb.2, %bb.343 44    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec45 46  bb.2:47 48  bb.3:49    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec50    DBG_VALUE51 52  bb.4:53    DBG_VALUE54    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec55    S_ENDPGM 056 57...58 59# Empty block separates the collapsable s_or_b6460---61name: simple_nested_if_empty_block_between62tracksRegLiveness: true63machineFunctionInfo:64  isEntryFunction: true65body:             |66  ; GCN-LABEL: name: simple_nested_if_empty_block_between67  ; GCN: bb.0:68  ; GCN-NEXT:   successors: %bb.5(0x40000000), %bb.1(0x40000000)69  ; GCN-NEXT: {{  $}}70  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec71  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc72  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]73  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.5, implicit $exec74  ; GCN-NEXT: {{  $}}75  ; GCN-NEXT: bb.1:76  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.4(0x40000000)77  ; GCN-NEXT: {{  $}}78  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec79  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc80  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]81  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec82  ; GCN-NEXT: {{  $}}83  ; GCN-NEXT: bb.2:84  ; GCN-NEXT:   successors: %bb.4(0x80000000)85  ; GCN-NEXT: {{  $}}86  ; GCN-NEXT: bb.4:87  ; GCN-NEXT:   successors: %bb.5(0x80000000)88  ; GCN-NEXT: {{  $}}89  ; GCN-NEXT: bb.5:90  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc91  ; GCN-NEXT:   S_ENDPGM 092  bb.0:93    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec94 95  bb.1:96    successors: %bb.2, %bb.397 98    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec99 100  bb.2:101 102  bb.3:103    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec104 105  bb.5:106 107  bb.4:108    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec109    S_ENDPGM 0110 111...112 113# Effectively empty block separates the collapsable s_or_b64114---115name: simple_nested_if_empty_block_dbg_between116tracksRegLiveness: true117machineFunctionInfo:118  isEntryFunction: true119body:             |120  ; GCN-LABEL: name: simple_nested_if_empty_block_dbg_between121  ; GCN: bb.0:122  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.5(0x40000000)123  ; GCN-NEXT: {{  $}}124  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec125  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc126  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]127  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.5, implicit $exec128  ; GCN-NEXT: {{  $}}129  ; GCN-NEXT: bb.1:130  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.4(0x40000000)131  ; GCN-NEXT: {{  $}}132  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec133  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc134  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]135  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec136  ; GCN-NEXT: {{  $}}137  ; GCN-NEXT: bb.2:138  ; GCN-NEXT:   successors: %bb.4(0x80000000)139  ; GCN-NEXT: {{  $}}140  ; GCN-NEXT: bb.4:141  ; GCN-NEXT:   successors: %bb.5(0x80000000)142  ; GCN-NEXT: {{  $}}143  ; GCN-NEXT:   DBG_VALUE144  ; GCN-NEXT: {{  $}}145  ; GCN-NEXT: bb.5:146  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc147  ; GCN-NEXT:   S_ENDPGM 0148  bb.0:149    successors: %bb.1, %bb.4150 151    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec152 153  bb.1:154    successors: %bb.2, %bb.3155 156    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec157 158  bb.2:159 160  bb.3:161    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec162 163  bb.5:164    DBG_VALUE165 166  bb.4:167    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec168    S_ENDPGM 0169 170...171 172---173name: skip_salu_and_meta_insts_find_first174tracksRegLiveness: true175machineFunctionInfo:176  isEntryFunction: true177body:             |178  ; GCN-LABEL: name: skip_salu_and_meta_insts_find_first179  ; GCN: bb.0:180  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)181  ; GCN-NEXT:   liveins: $vgpr0, $sgpr0_sgpr1182  ; GCN-NEXT: {{  $}}183  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec184  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc185  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]186  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec187  ; GCN-NEXT: {{  $}}188  ; GCN-NEXT: bb.1:189  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)190  ; GCN-NEXT: {{  $}}191  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec192  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc193  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]194  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.3, implicit $exec195  ; GCN-NEXT: {{  $}}196  ; GCN-NEXT: bb.2:197  ; GCN-NEXT:   successors: %bb.3(0x80000000)198  ; GCN-NEXT: {{  $}}199  ; GCN-NEXT: bb.3:200  ; GCN-NEXT:   successors: %bb.4(0x80000000)201  ; GCN-NEXT: {{  $}}202  ; GCN-NEXT:   [[DEF:%[0-9]+]]:sgpr_32 = IMPLICIT_DEF203  ; GCN-NEXT:   [[S_BREV_B32_:%[0-9]+]]:sgpr_32 = S_BREV_B32 [[DEF]]204  ; GCN-NEXT:   KILL [[DEF]]205  ; GCN-NEXT: {{  $}}206  ; GCN-NEXT: bb.4:207  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc208  ; GCN-NEXT:   S_ENDPGM 0209  bb.0:210    successors: %bb.1, %bb.4211    liveins: $vgpr0, $sgpr0_sgpr1212 213    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec214 215  bb.1:216    successors: %bb.2, %bb.3217 218    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec219 220  bb.2:221 222  bb.3:223    %4:sgpr_32 = IMPLICIT_DEF224    %5:sgpr_32 = S_BREV_B32 %4225    KILL %4226    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec227 228  bb.4:229    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec230    S_ENDPGM 0231 232...233 234# Make sure SALU instructions, meta instructions, and SGPR->SGPR235# copies are skipped.236---237name: skip_salu_and_meta_insts_after238tracksRegLiveness: true239machineFunctionInfo:240  isEntryFunction: true241body:             |242  ; GCN-LABEL: name: skip_salu_and_meta_insts_after243  ; GCN: bb.0:244  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)245  ; GCN-NEXT: {{  $}}246  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec247  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc248  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]249  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec250  ; GCN-NEXT: {{  $}}251  ; GCN-NEXT: bb.1:252  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)253  ; GCN-NEXT: {{  $}}254  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec255  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc256  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]257  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.3, implicit $exec258  ; GCN-NEXT: {{  $}}259  ; GCN-NEXT: bb.2:260  ; GCN-NEXT:   successors: %bb.3(0x80000000)261  ; GCN-NEXT: {{  $}}262  ; GCN-NEXT: bb.3:263  ; GCN-NEXT:   successors: %bb.4(0x80000000)264  ; GCN-NEXT: {{  $}}265  ; GCN-NEXT:   [[DEF:%[0-9]+]]:sgpr_32 = IMPLICIT_DEF266  ; GCN-NEXT:   [[S_BREV_B32_:%[0-9]+]]:sgpr_32 = S_BREV_B32 [[DEF]]267  ; GCN-NEXT:   KILL [[DEF]]268  ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sgpr_32 = COPY [[S_BREV_B32_]]269  ; GCN-NEXT: {{  $}}270  ; GCN-NEXT: bb.4:271  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc272  ; GCN-NEXT:   S_ENDPGM 0273  bb.0:274    successors: %bb.1, %bb.4275 276    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec277 278  bb.1:279    successors: %bb.2, %bb.3280 281    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec282 283  bb.2:284 285  bb.3:286    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec287    %4:sgpr_32 = IMPLICIT_DEF288    %5:sgpr_32 = S_BREV_B32 %4289    KILL %4290    %6:sgpr_32 = COPY %5291 292  bb.4:293    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec294    S_ENDPGM 0295 296...297 298# SALU instruction depends on exec through a normal operand.299---300name: salu_exec_dependency301tracksRegLiveness: true302machineFunctionInfo:303  isEntryFunction: true304body:             |305  ; GCN-LABEL: name: salu_exec_dependency306  ; GCN: bb.0:307  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)308  ; GCN-NEXT: {{  $}}309  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec310  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc311  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]312  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec313  ; GCN-NEXT: {{  $}}314  ; GCN-NEXT: bb.1:315  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)316  ; GCN-NEXT: {{  $}}317  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec318  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc319  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]320  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.3, implicit $exec321  ; GCN-NEXT: {{  $}}322  ; GCN-NEXT: bb.2:323  ; GCN-NEXT:   successors: %bb.3(0x80000000)324  ; GCN-NEXT: {{  $}}325  ; GCN-NEXT: bb.3:326  ; GCN-NEXT:   successors: %bb.4(0x80000000)327  ; GCN-NEXT: {{  $}}328  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY1]], implicit-def $scc329  ; GCN-NEXT:   [[S_BREV_B64_:%[0-9]+]]:sreg_64 = S_BREV_B64 $exec330  ; GCN-NEXT: {{  $}}331  ; GCN-NEXT: bb.4:332  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc333  ; GCN-NEXT:   S_ENDPGM 0334  bb.0:335    successors: %bb.1, %bb.4336 337    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec338 339  bb.1:340    successors: %bb.2, %bb.3341 342    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec343 344  bb.2:345 346  bb.3:347    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec348    %4:sreg_64 = S_BREV_B64 $exec349 350  bb.4:351    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec352    S_ENDPGM 0353 354...355 356# Copy to / from VGPR should be assumed to read exec357---358name: copy_no_explicit_exec_dependency359tracksRegLiveness: true360machineFunctionInfo:361  isEntryFunction: true362body:             |363  ; GCN-LABEL: name: copy_no_explicit_exec_dependency364  ; GCN: bb.0:365  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)366  ; GCN-NEXT: {{  $}}367  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec368  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc369  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]370  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec371  ; GCN-NEXT: {{  $}}372  ; GCN-NEXT: bb.1:373  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)374  ; GCN-NEXT: {{  $}}375  ; GCN-NEXT:   [[DEF:%[0-9]+]]:vreg_128 = IMPLICIT_DEF376  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec377  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %4:sreg_64, implicit-def dead $scc378  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]379  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.3, implicit $exec380  ; GCN-NEXT: {{  $}}381  ; GCN-NEXT: bb.2:382  ; GCN-NEXT:   successors: %bb.3(0x80000000)383  ; GCN-NEXT: {{  $}}384  ; GCN-NEXT: bb.3:385  ; GCN-NEXT:   successors: %bb.4(0x80000000)386  ; GCN-NEXT: {{  $}}387  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY1]], implicit-def $scc388  ; GCN-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[DEF]].sub2389  ; GCN-NEXT: {{  $}}390  ; GCN-NEXT: bb.4:391  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc392  ; GCN-NEXT:   S_ENDPGM 0393  bb.0:394    successors: %bb.1, %bb.4395 396    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec397 398  bb.1:399    successors: %bb.2, %bb.3400 401    %2:vreg_128 = IMPLICIT_DEF402    %3:sreg_64 = SI_IF undef %4:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec403 404  bb.2:405 406  bb.3:407    SI_END_CF %3:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec408    %5:vgpr_32 = COPY %2.sub2409 410  bb.4:411    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec412    S_ENDPGM 0413 414...415 416---417name: simple_nested_if_not_layout_successor418tracksRegLiveness: true419machineFunctionInfo:420  isEntryFunction: true421body:             |422  ; GCN-LABEL: name: simple_nested_if_not_layout_successor423  ; GCN: bb.0:424  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)425  ; GCN-NEXT: {{  $}}426  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec427  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc428  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]429  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec430  ; GCN-NEXT: {{  $}}431  ; GCN-NEXT: bb.1:432  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.5(0x40000000)433  ; GCN-NEXT: {{  $}}434  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec435  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc436  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]437  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.5, implicit $exec438  ; GCN-NEXT: {{  $}}439  ; GCN-NEXT: bb.2:440  ; GCN-NEXT:   successors: %bb.5(0x80000000)441  ; GCN-NEXT: {{  $}}442  ; GCN-NEXT:   S_BRANCH %bb.5443  ; GCN-NEXT: {{  $}}444  ; GCN-NEXT: bb.4:445  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc446  ; GCN-NEXT:   S_ENDPGM 0447  ; GCN-NEXT: {{  $}}448  ; GCN-NEXT: bb.5:449  ; GCN-NEXT:   successors: %bb.4(0x80000000)450  ; GCN-NEXT: {{  $}}451  ; GCN-NEXT:   S_BRANCH %bb.4452  bb.0:453    successors: %bb.1, %bb.4454 455    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec456 457  bb.1:458    successors: %bb.2, %bb.3459 460    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec461 462  bb.2:463 464  bb.3:465    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec466    S_BRANCH %bb.5467 468  bb.4:469    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec470    S_ENDPGM 0471 472  bb.5:473    S_BRANCH %bb.4474 475...476 477# This should never happen, but check that we do not hang anyway478 479---480name: resursive_endcf481tracksRegLiveness: true482liveins:483  - { reg: '$vgpr0', virtual-reg: '%0' }484machineFunctionInfo:485  isEntryFunction: true486body:             |487  ; GCN-LABEL: name: resursive_endcf488  ; GCN: bb.0:489  ; GCN-NEXT:   successors: %bb.1(0x80000000)490  ; GCN-NEXT:   liveins: $vgpr0491  ; GCN-NEXT: {{  $}}492  ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0493  ; GCN-NEXT:   [[V_CMP_LT_U32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_U32_e64 1, [[COPY]], implicit $exec494  ; GCN-NEXT: {{  $}}495  ; GCN-NEXT: bb.1:496  ; GCN-NEXT:   successors: %bb.1(0x80000000)497  ; GCN-NEXT: {{  $}}498  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[V_CMP_LT_U32_e64_]], implicit-def $scc499  ; GCN-NEXT:   S_BRANCH %bb.1500  bb.0:501    successors: %bb.1502    liveins: $vgpr0503 504    %0:vgpr_32 = COPY $vgpr0505    %2:sreg_64 = V_CMP_LT_U32_e64 1, %0, implicit $exec506 507  bb.1:508    successors: %bb.1509 510    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec511    S_BRANCH %bb.1512 513...514 515# Both s_or_b64 shall be preserved since the outer SI_END_CF belongs to SI_ELSE.516 517---518name: simple_outer_if_else519tracksRegLiveness: true520machineFunctionInfo:521  isEntryFunction: true522body:             |523  ; GCN-LABEL: name: simple_outer_if_else524  ; GCN: bb.0:525  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)526  ; GCN-NEXT: {{  $}}527  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec528  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc529  ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[S_AND_B64_]], [[COPY]], implicit-def dead $scc530  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]531  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec532  ; GCN-NEXT: {{  $}}533  ; GCN-NEXT: bb.1:534  ; GCN-NEXT:   successors: %bb.2(0x80000000)535  ; GCN-NEXT: {{  $}}536  ; GCN-NEXT:   S_BRANCH %bb.2537  ; GCN-NEXT: {{  $}}538  ; GCN-NEXT: bb.2:539  ; GCN-NEXT:   successors: %bb.3(0x40000000), %bb.6(0x40000000)540  ; GCN-NEXT: {{  $}}541  ; GCN-NEXT:   [[S_OR_SAVEEXEC_B64_:%[0-9]+]]:sreg_64 = S_OR_SAVEEXEC_B64 [[S_XOR_B64_]], implicit-def $exec, implicit-def $scc, implicit $exec542  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 $exec, [[S_OR_SAVEEXEC_B64_]], implicit-def $scc543  ; GCN-NEXT:   $exec = S_XOR_B64_term $exec, [[S_AND_B64_1]], implicit-def $scc544  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.6, implicit $exec545  ; GCN-NEXT: {{  $}}546  ; GCN-NEXT: bb.3:547  ; GCN-NEXT:   successors: %bb.3(0x40000000), %bb.4(0x40000000)548  ; GCN-NEXT: {{  $}}549  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec550  ; GCN-NEXT:   [[S_AND_B64_2:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %4:sreg_64, implicit-def dead $scc551  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_2]]552  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.3, implicit $exec553  ; GCN-NEXT: {{  $}}554  ; GCN-NEXT: bb.4:555  ; GCN-NEXT:   successors: %bb.5(0x80000000)556  ; GCN-NEXT: {{  $}}557  ; GCN-NEXT: bb.5:558  ; GCN-NEXT:   successors: %bb.6(0x80000000)559  ; GCN-NEXT: {{  $}}560  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY1]], implicit-def $scc561  ; GCN-NEXT: {{  $}}562  ; GCN-NEXT: bb.6:563  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[S_AND_B64_1]], implicit-def $scc564  ; GCN-NEXT:   S_ENDPGM 0565  bb.0:566    successors: %bb.1, %bb.2567 568    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec569 570  bb.1:571    successors: %bb.2572    S_BRANCH %bb.2573 574  bb.2:575    successors: %bb.3, %bb.6576    %2:sreg_64 = SI_ELSE %0:sreg_64, %bb.6, implicit-def dead $exec, implicit-def dead $scc, implicit $exec577 578  bb.3:579    successors: %bb.3, %bb.4580 581    %3:sreg_64 = SI_IF undef %4:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec582 583  bb.4:584    successors: %bb.5585 586  bb.5:587    successors: %bb.6588 589    SI_END_CF %3:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec590 591  bb.6:592    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec593    S_ENDPGM 0594 595...596 597---598name: if_inside_loop599tracksRegLiveness: true600machineFunctionInfo:601  isEntryFunction: true602body:             |603  ; GCN-LABEL: name: if_inside_loop604  ; GCN: bb.0:605  ; GCN-NEXT:   successors: %bb.6(0x80000000)606  ; GCN-NEXT: {{  $}}607  ; GCN-NEXT:   S_BRANCH %bb.6608  ; GCN-NEXT: {{  $}}609  ; GCN-NEXT: bb.1:610  ; GCN-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)611  ; GCN-NEXT: {{  $}}612  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec613  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc614  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]615  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.3, implicit $exec616  ; GCN-NEXT: {{  $}}617  ; GCN-NEXT: bb.2:618  ; GCN-NEXT:   successors: %bb.6(0x80000000)619  ; GCN-NEXT: {{  $}}620  ; GCN-NEXT:   S_BRANCH %bb.6621  ; GCN-NEXT: {{  $}}622  ; GCN-NEXT: bb.3:623  ; GCN-NEXT:   successors: %bb.4(0x80000000)624  ; GCN-NEXT: {{  $}}625  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc626  ; GCN-NEXT: {{  $}}627  ; GCN-NEXT: bb.4:628  ; GCN-NEXT:   successors: %bb.5(0x80000000)629  ; GCN-NEXT: {{  $}}630  ; GCN-NEXT:   $exec = S_OR_B64 $exec, %2, implicit-def $scc631  ; GCN-NEXT: {{  $}}632  ; GCN-NEXT: bb.5:633  ; GCN-NEXT:   successors: %bb.6(0x80000000)634  ; GCN-NEXT: {{  $}}635  ; GCN-NEXT: bb.6:636  ; GCN-NEXT:   successors: %bb.4(0x40000000), %bb.0(0x40000000)637  ; GCN-NEXT: {{  $}}638  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec639  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc640  ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[S_AND_B64_1]], [[COPY1]], implicit-def dead $scc641  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]642  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec643  ; GCN-NEXT:   S_BRANCH %bb.0644  ; GCN-NEXT:   S_ENDPGM 0645  bb.0:646    S_BRANCH %bb.6647 648  bb.1:649    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec650 651  bb.2:652    S_BRANCH %bb.6653 654  bb.3:655    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec656 657  bb.4:658    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec659 660  bb.5:661 662  bb.6:663    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec664    S_BRANCH %bb.0665    S_ENDPGM 0666 667...668 669---670# redundant MBB removal correctness test:671# we can keep bb.2 fallthrough to the  new succ because after bb.3 gets removed672# new succ (bb.4) becomes bb.2's layout successor673name: removed_succ_fallthrough_but_layout_successor674tracksRegLiveness: true675machineFunctionInfo:676  isEntryFunction: true677body:             |678  ; GCN-LABEL: name: removed_succ_fallthrough_but_layout_successor679  ; GCN: bb.0:680  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)681  ; GCN-NEXT: {{  $}}682  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec683  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc684  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]685  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec686  ; GCN-NEXT: {{  $}}687  ; GCN-NEXT: bb.1:688  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.4(0x40000000)689  ; GCN-NEXT: {{  $}}690  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec691  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc692  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]693  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec694  ; GCN-NEXT: {{  $}}695  ; GCN-NEXT: bb.2:696  ; GCN-NEXT:   successors: %bb.4(0x80000000)697  ; GCN-NEXT: {{  $}}698  ; GCN-NEXT: bb.4:699  ; GCN-NEXT:   successors: %bb.5(0x80000000)700  ; GCN-NEXT: {{  $}}701  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc702  ; GCN-NEXT: {{  $}}703  ; GCN-NEXT: bb.5:704  ; GCN-NEXT:   S_ENDPGM 0705  bb.0:706    successors: %bb.1, %bb.4707 708    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec709 710  bb.1:711    successors: %bb.2, %bb.3712 713    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec714 715  bb.2:716 717  bb.3:718    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec719 720 721  bb.4:722    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec723 724  bb.5:725    S_ENDPGM 0726 727...728 729---730# redundant MBB removal correctness test:731# If one of the remdundant block preds has a fallthrough path, but the only redundant block succ is not732# going to be a layout successor to that pred after redundant block removal, we should not rearrange733# blocks to keep pred's fallthrough path, if the succ has fallthrough path to one of it's succ too.734 735name: deleted_succ_fallthrough_not_layout_successor736tracksRegLiveness: true737machineFunctionInfo:738  isEntryFunction: true739body:             |740  ; GCN-LABEL: name: deleted_succ_fallthrough_not_layout_successor741  ; GCN: bb.0:742  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.4(0x40000000)743  ; GCN-NEXT: {{  $}}744  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec745  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc746  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]747  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec748  ; GCN-NEXT: {{  $}}749  ; GCN-NEXT: bb.1:750  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.5(0x40000000)751  ; GCN-NEXT: {{  $}}752  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec753  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], undef %3:sreg_64, implicit-def dead $scc754  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]755  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.5, implicit $exec756  ; GCN-NEXT: {{  $}}757  ; GCN-NEXT: bb.2:758  ; GCN-NEXT:   successors: %bb.5(0x80000000)759  ; GCN-NEXT: {{  $}}760  ; GCN-NEXT:   S_BRANCH %bb.5761  ; GCN-NEXT: {{  $}}762  ; GCN-NEXT: bb.4:763  ; GCN-NEXT:   S_ENDPGM 0764  ; GCN-NEXT: {{  $}}765  ; GCN-NEXT: bb.5:766  ; GCN-NEXT:   successors: %bb.6(0x80000000)767  ; GCN-NEXT: {{  $}}768  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc769  ; GCN-NEXT: {{  $}}770  ; GCN-NEXT: bb.6:771  ; GCN-NEXT:   successors: %bb.4(0x80000000)772  ; GCN-NEXT: {{  $}}773  ; GCN-NEXT:   S_BRANCH %bb.4774  bb.0:775    successors: %bb.1, %bb.4776 777    %0:sreg_64 = SI_IF undef %1:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec778 779  bb.1:780    successors: %bb.2, %bb.3781 782    %2:sreg_64 = SI_IF undef %3:sreg_64, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec783 784  bb.2:785 786  bb.3:787    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec788    S_BRANCH %bb.5789 790  bb.4:791    S_ENDPGM 0792 793 794  bb.5:795    SI_END_CF %0:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec796 797  bb.6:798    S_BRANCH %bb.4799...800 801---802# While collapsing inner endcf, certain blocks ended up getting two S_BRANCH instructions.803# It happens in the absence of BranchFolding (mostly at -O0) when the irregularly placed BBs are traversed804# in the forward direction and the intervening block between a predecessor and its successor gets optimized805# away in subsequent iterations, leaving 2 S_BRANCH instructions in the predecessor block.806# The issue was fixed by iterating the blocks from bottom-up to ensure all endcf pseudos at the bottom of the807# function are processed first.808# This test ensures there are no multiple S_BRANCH instructions inserted in any block.809 810name: no_multiple_unconditional_branches811tracksRegLiveness: true812body: |813  ; GCN-LABEL: name: no_multiple_unconditional_branches814  ; GCN: bb.0:815  ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.14(0x40000000)816  ; GCN-NEXT: {{  $}}817  ; GCN-NEXT:   [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF818  ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64 = V_CMP_EQ_U32_e64 0, killed [[DEF]], implicit $exec819  ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec820  ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc821  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]822  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.14, implicit $exec823  ; GCN-NEXT:   S_BRANCH %bb.1824  ; GCN-NEXT: {{  $}}825  ; GCN-NEXT: bb.1:826  ; GCN-NEXT:   successors: %bb.2(0x40000000), %bb.14(0x40000000)827  ; GCN-NEXT: {{  $}}828  ; GCN-NEXT:   [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF829  ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_1:%[0-9]+]]:sreg_64 = V_CMP_EQ_U32_e64 0, killed [[DEF1]], implicit $exec830  ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec831  ; GCN-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY1]], killed [[V_CMP_EQ_U32_e64_1]], implicit-def dead $scc832  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]833  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.14, implicit $exec834  ; GCN-NEXT:   S_BRANCH %bb.2835  ; GCN-NEXT: {{  $}}836  ; GCN-NEXT: bb.2:837  ; GCN-NEXT:   successors: %bb.3(0x40000000), %bb.7(0x40000000)838  ; GCN-NEXT: {{  $}}839  ; GCN-NEXT:   [[DEF2:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF840  ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_2:%[0-9]+]]:sreg_64 = V_CMP_EQ_U32_e64 0, killed [[DEF2]], implicit $exec841  ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec842  ; GCN-NEXT:   [[S_AND_B64_2:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], killed [[V_CMP_EQ_U32_e64_2]], implicit-def dead $scc843  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_2]]844  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.7, implicit $exec845  ; GCN-NEXT:   S_BRANCH %bb.3846  ; GCN-NEXT: {{  $}}847  ; GCN-NEXT: bb.3:848  ; GCN-NEXT:   successors: %bb.4(0x40000000), %bb.7(0x40000000)849  ; GCN-NEXT: {{  $}}850  ; GCN-NEXT:   [[DEF3:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF851  ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_3:%[0-9]+]]:sreg_64 = V_CMP_EQ_U32_e64 0, killed [[DEF3]], implicit $exec852  ; GCN-NEXT:   [[COPY3:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec853  ; GCN-NEXT:   [[S_AND_B64_3:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY3]], killed [[V_CMP_EQ_U32_e64_3]], implicit-def dead $scc854  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_3]]855  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.7, implicit $exec856  ; GCN-NEXT:   S_BRANCH %bb.4857  ; GCN-NEXT: {{  $}}858  ; GCN-NEXT: bb.4:859  ; GCN-NEXT:   successors: %bb.7(0x80000000)860  ; GCN-NEXT: {{  $}}861  ; GCN-NEXT:   S_BRANCH %bb.7862  ; GCN-NEXT: {{  $}}863  ; GCN-NEXT: bb.7:864  ; GCN-NEXT:   successors: %bb.8(0x80000000)865  ; GCN-NEXT: {{  $}}866  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY2]], implicit-def $scc867  ; GCN-NEXT:   S_BRANCH %bb.8868  ; GCN-NEXT: {{  $}}869  ; GCN-NEXT: bb.8:870  ; GCN-NEXT:   successors: %bb.9(0x80000000)871  ; GCN-NEXT: {{  $}}872  ; GCN-NEXT:   S_BRANCH %bb.9873  ; GCN-NEXT: {{  $}}874  ; GCN-NEXT: bb.9:875  ; GCN-NEXT:   successors: %bb.11(0x40000000), %bb.12(0x40000000)876  ; GCN-NEXT: {{  $}}877  ; GCN-NEXT:   [[DEF4:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF878  ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_4:%[0-9]+]]:sreg_64 = V_CMP_EQ_U32_e64 0, killed [[DEF4]], implicit $exec879  ; GCN-NEXT:   [[COPY4:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec880  ; GCN-NEXT:   [[S_AND_B64_4:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY4]], killed [[V_CMP_EQ_U32_e64_4]], implicit-def dead $scc881  ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[S_AND_B64_4]], [[COPY4]], implicit-def dead $scc882  ; GCN-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_4]]883  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.12, implicit $exec884  ; GCN-NEXT:   S_BRANCH %bb.11885  ; GCN-NEXT: {{  $}}886  ; GCN-NEXT: bb.10:887  ; GCN-NEXT:   successors: %bb.14(0x80000000)888  ; GCN-NEXT: {{  $}}889  ; GCN-NEXT:   S_BRANCH %bb.14890  ; GCN-NEXT: {{  $}}891  ; GCN-NEXT: bb.11:892  ; GCN-NEXT:   successors: %bb.12(0x80000000)893  ; GCN-NEXT: {{  $}}894  ; GCN-NEXT:   S_BRANCH %bb.12895  ; GCN-NEXT: {{  $}}896  ; GCN-NEXT: bb.12:897  ; GCN-NEXT:   successors: %bb.10(0x40000000), %bb.14(0x40000000)898  ; GCN-NEXT: {{  $}}899  ; GCN-NEXT:   [[S_OR_SAVEEXEC_B64_:%[0-9]+]]:sreg_64 = S_OR_SAVEEXEC_B64 [[S_XOR_B64_]], implicit-def $exec, implicit-def $scc, implicit $exec900  ; GCN-NEXT:   [[S_AND_B64_5:%[0-9]+]]:sreg_64 = S_AND_B64 $exec, [[S_OR_SAVEEXEC_B64_]], implicit-def $scc901  ; GCN-NEXT:   $exec = S_XOR_B64_term $exec, [[S_AND_B64_5]], implicit-def $scc902  ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.14, implicit $exec903  ; GCN-NEXT:   S_BRANCH %bb.10904  ; GCN-NEXT: {{  $}}905  ; GCN-NEXT: bb.14:906  ; GCN-NEXT:   $exec = S_OR_B64 $exec, [[COPY]], implicit-def $scc907  ; GCN-NEXT:   S_ENDPGM 0908  bb.0:909    successors: %bb.1, %bb.14910 911    %0:vgpr_32 = IMPLICIT_DEF912    %1:sreg_64 = V_CMP_EQ_U32_e64 0, killed %0:vgpr_32, implicit $exec913    %2:sreg_64 = SI_IF %1:sreg_64, %bb.14, implicit-def $exec, implicit-def dead $scc, implicit $exec914    S_BRANCH %bb.1915 916  bb.1:917    successors: %bb.2, %bb.6918 919    %3:vgpr_32 = IMPLICIT_DEF920    %4:sreg_64 = V_CMP_EQ_U32_e64 0, killed %3:vgpr_32, implicit $exec921    %5:sreg_64 = SI_IF killed %4:sreg_64, %bb.6, implicit-def dead $exec, implicit-def dead $scc, implicit $exec922    S_BRANCH %bb.2923 924  bb.2:925    successors: %bb.3, %bb.7926 927    %6:vgpr_32 = IMPLICIT_DEF928    %7:sreg_64 = V_CMP_EQ_U32_e64 0, killed %6:vgpr_32, implicit $exec929    %8:sreg_64 = SI_IF killed %7:sreg_64, %bb.7, implicit-def dead $exec, implicit-def dead $scc, implicit $exec930    S_BRANCH %bb.3931 932  bb.3:933    successors: %bb.4, %bb.5934 935    %9:vgpr_32 = IMPLICIT_DEF936    %10:sreg_64 = V_CMP_EQ_U32_e64 0, killed %9:vgpr_32, implicit $exec937    %11:sreg_64 = SI_IF killed %10:sreg_64, %bb.5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec938    S_BRANCH %bb.4939 940  bb.4:941    successors: %bb.5942 943    S_BRANCH %bb.5944 945  bb.5:946    successors: %bb.7947 948    SI_END_CF %11:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec949    S_BRANCH %bb.7950 951  bb.6:952    successors: %bb.14953 954    SI_END_CF %5:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec955    S_BRANCH %bb.14956 957  bb.7:958    successors: %bb.8959 960    SI_END_CF %8:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec961    S_BRANCH %bb.8962 963  bb.8:964    successors: %bb.9965 966    S_BRANCH %bb.9967 968  bb.9:969    successors: %bb.11, %bb.12970 971    %12:vgpr_32 = IMPLICIT_DEF972    %13:sreg_64 = V_CMP_EQ_U32_e64 0, killed %12:vgpr_32, implicit $exec973    %14:sreg_64 = SI_IF killed %13:sreg_64, %bb.12, implicit-def dead $exec, implicit-def dead $scc, implicit $exec974    S_BRANCH %bb.11975 976  bb.10:977    successors: %bb.13978 979    S_BRANCH %bb.13980 981  bb.11:982    successors: %bb.12983 984    S_BRANCH %bb.12985 986  bb.12:987    successors: %bb.10, %bb.13988 989    %15:sreg_64 = SI_ELSE %14:sreg_64, %bb.13, implicit-def dead $exec, implicit-def dead $scc, implicit $exec990    S_BRANCH %bb.10991 992  bb.13:993    successors: %bb.6994 995    SI_END_CF %15:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec996    S_BRANCH %bb.6997 998  bb.14:999 1000    SI_END_CF %2:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec1001    S_ENDPGM 01002 1003...1004