219 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass=si-pre-emit-peephole -o - %s | FileCheck %s3 4---5name: skip_branch_taildup_endpgm6machineFunctionInfo:7 isEntryFunction: true8body: |9 ; CHECK-LABEL: name: skip_branch_taildup_endpgm10 ; CHECK: bb.0:11 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.1(0x40000000)12 ; CHECK-NEXT: liveins: $vgpr0, $sgpr4_sgpr5, $sgpr713 ; CHECK-NEXT: {{ $}}14 ; CHECK-NEXT: renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM renamable $sgpr4_sgpr5, 4, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)15 ; CHECK-NEXT: renamable $vgpr0 = V_LSHLREV_B32_e32 2, killed $vgpr0, implicit $exec16 ; CHECK-NEXT: S_WAITCNT 12717 ; CHECK-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $exec18 ; CHECK-NEXT: renamable $vgpr0 = V_ADD_CO_U32_e32 $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec19 ; CHECK-NEXT: renamable $vgpr1 = V_ADDC_U32_e32 0, killed $vgpr1, implicit-def $vcc, implicit killed $vcc, implicit $exec20 ; CHECK-NEXT: renamable $vgpr0 = FLAT_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 1)21 ; CHECK-NEXT: renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)22 ; CHECK-NEXT: S_WAITCNT 11223 ; CHECK-NEXT: V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec24 ; CHECK-NEXT: $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec25 ; CHECK-NEXT: renamable $sgpr2_sgpr3 = S_XOR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def dead $scc26 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec27 ; CHECK-NEXT: S_BRANCH %bb.328 ; CHECK-NEXT: {{ $}}29 ; CHECK-NEXT: bb.1:30 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000)31 ; CHECK-NEXT: liveins: $sgpr0_sgpr1, $sgpr2_sgpr332 ; CHECK-NEXT: {{ $}}33 ; CHECK-NEXT: renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec34 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc35 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec36 ; CHECK-NEXT: S_BRANCH %bb.437 ; CHECK-NEXT: {{ $}}38 ; CHECK-NEXT: bb.2:39 ; CHECK-NEXT: liveins: $sgpr2_sgpr340 ; CHECK-NEXT: {{ $}}41 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc42 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec43 ; CHECK-NEXT: S_ENDPGM 044 ; CHECK-NEXT: {{ $}}45 ; CHECK-NEXT: bb.3:46 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000)47 ; CHECK-NEXT: liveins: $sgpr0_sgpr1, $sgpr2_sgpr348 ; CHECK-NEXT: {{ $}}49 ; CHECK-NEXT: renamable $vgpr2 = V_MOV_B32_e32 15, implicit $exec50 ; CHECK-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr151 ; CHECK-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec52 ; CHECK-NEXT: renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec53 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc54 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec55 ; CHECK-NEXT: S_BRANCH %bb.456 ; CHECK-NEXT: {{ $}}57 ; CHECK-NEXT: bb.4:58 ; CHECK-NEXT: liveins: $sgpr0_sgpr1, $sgpr2_sgpr359 ; CHECK-NEXT: {{ $}}60 ; CHECK-NEXT: renamable $vgpr2 = V_MOV_B32_e32 8, implicit $exec61 ; CHECK-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr162 ; CHECK-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit killed $sgpr0_sgpr1, implicit $exec63 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc64 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec65 ; CHECK-NEXT: S_ENDPGM 066 bb.0:67 successors: %bb.1, %bb.268 liveins: $vgpr0, $sgpr4_sgpr5, $sgpr769 70 renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM renamable $sgpr4_sgpr5, 4, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)71 renamable $vgpr0 = V_LSHLREV_B32_e32 2, killed $vgpr0, implicit $exec72 S_WAITCNT 12773 $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $exec74 renamable $vgpr0 = V_ADD_CO_U32_e32 $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec75 renamable $vgpr1 = V_ADDC_U32_e32 0, killed $vgpr1, implicit-def $vcc, implicit killed $vcc, implicit $exec76 renamable $vgpr0 = FLAT_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 1)77 renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)78 S_WAITCNT 11279 V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec80 $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec81 renamable $sgpr2_sgpr3 = S_XOR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def dead $scc82 S_CBRANCH_EXECZ %bb.2, implicit $exec83 S_BRANCH %bb.184 85 bb.2:86 successors: %bb.3, %bb.487 liveins: $sgpr0_sgpr1, $sgpr2_sgpr388 89 renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec90 $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc91 S_CBRANCH_EXECZ %bb.4, implicit $exec92 S_BRANCH %bb.393 94 bb.4:95 liveins: $sgpr2_sgpr396 97 $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc98 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec99 S_ENDPGM 0100 101 bb.1:102 successors: %bb.3, %bb.4103 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3104 105 renamable $vgpr2 = V_MOV_B32_e32 15, implicit $exec106 $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1107 $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec108 renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec109 $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc110 S_CBRANCH_EXECZ %bb.4, implicit $exec111 S_BRANCH %bb.3112 113 bb.3:114 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3115 116 renamable $vgpr2 = V_MOV_B32_e32 8, implicit $exec117 $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1118 $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit killed $sgpr0_sgpr1, implicit $exec119 $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc120 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec121 S_ENDPGM 0122 123...124 125---126name: skip_branch_taildup_ret127body: |128 ; CHECK-LABEL: name: skip_branch_taildup_ret129 ; CHECK: bb.0:130 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.1(0x40000000)131 ; CHECK-NEXT: liveins: $vgpr0, $sgpr30_sgpr31, $vgpr1_vgpr2132 ; CHECK-NEXT: {{ $}}133 ; CHECK-NEXT: S_WAITCNT 0134 ; CHECK-NEXT: V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec135 ; CHECK-NEXT: $sgpr6_sgpr7 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec136 ; CHECK-NEXT: renamable $sgpr6_sgpr7 = S_XOR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def dead $scc137 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec138 ; CHECK-NEXT: S_BRANCH %bb.3139 ; CHECK-NEXT: {{ $}}140 ; CHECK-NEXT: bb.1:141 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000)142 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2143 ; CHECK-NEXT: {{ $}}144 ; CHECK-NEXT: renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec145 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc146 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec147 ; CHECK-NEXT: S_BRANCH %bb.4148 ; CHECK-NEXT: {{ $}}149 ; CHECK-NEXT: bb.2:150 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31151 ; CHECK-NEXT: {{ $}}152 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc153 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec154 ; CHECK-NEXT: S_SETPC_B64_return $sgpr30_sgpr31155 ; CHECK-NEXT: {{ $}}156 ; CHECK-NEXT: bb.3:157 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000)158 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2159 ; CHECK-NEXT: {{ $}}160 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 15, implicit $exec161 ; CHECK-NEXT: renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec162 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc163 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec164 ; CHECK-NEXT: S_BRANCH %bb.4165 ; CHECK-NEXT: {{ $}}166 ; CHECK-NEXT: bb.4:167 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2168 ; CHECK-NEXT: {{ $}}169 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 8, implicit $exec170 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc171 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec172 ; CHECK-NEXT: S_SETPC_B64_return $sgpr30_sgpr31173 bb.0:174 successors: %bb.1, %bb.2175 liveins: $vgpr0, $sgpr30_sgpr31, $vgpr1_vgpr2176 177 S_WAITCNT 0178 V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec179 $sgpr6_sgpr7 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec180 renamable $sgpr6_sgpr7 = S_XOR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def dead $scc181 S_CBRANCH_EXECZ %bb.2, implicit $exec182 S_BRANCH %bb.1183 184 bb.2:185 successors: %bb.3, %bb.4186 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2187 188 renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec189 $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc190 S_CBRANCH_EXECZ %bb.4, implicit $exec191 S_BRANCH %bb.3192 193 bb.4:194 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31195 196 $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc197 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec198 S_SETPC_B64_return $sgpr30_sgpr31199 200 bb.1:201 successors: %bb.3, %bb.4202 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2203 204 renamable $vgpr0 = V_MOV_B32_e32 15, implicit $exec205 renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec206 $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc207 S_CBRANCH_EXECZ %bb.4, implicit $exec208 S_BRANCH %bb.3209 210 bb.3:211 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2212 213 renamable $vgpr0 = V_MOV_B32_e32 8, implicit $exec214 $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc215 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec216 S_SETPC_B64_return $sgpr30_sgpr31217 218...219