brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.7 KiB · c845a4c Raw
622 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O2 -mtriple=amdgcn -mcpu=gfx1100 -run-pass=si-insert-waitcnts -verify-machineinstrs -o - %s | FileCheck %s -check-prefixes=CHECK,OPT3# RUN: llc -O0 -mtriple=amdgcn -mcpu=gfx1100 -run-pass=si-insert-waitcnts -verify-machineinstrs -o - %s | FileCheck %s -check-prefixes=CHECK,NOOPT4 5--- |6  define amdgpu_ps void @tbuffer_store1() { ret void }7  define amdgpu_ps void @tbuffer_store2() { ret void }8  define amdgpu_ps void @flat_store() { ret void }9  define amdgpu_ps void @global_store() { ret void }10  define amdgpu_ps void @buffer_store_format() { ret void }11  define amdgpu_ps void @ds_write_b32() { ret void }12  define amdgpu_ps void @global_store_dword() { ret void }13  define amdgpu_ps void @multiple_basic_blocks1() { ret void }14  define amdgpu_ps void @multiple_basic_blocks2() { ret void }15  define amdgpu_ps void @multiple_basic_blocks3() { ret void }16  define amdgpu_ps void @recursive_loop() { ret void }17  define amdgpu_ps void @recursive_loop_vmem() { ret void }18  define amdgpu_ps void @image_store() { ret void }19  define amdgpu_ps void @scratch_store() { ret void }20  define amdgpu_ps void @buffer_atomic() { ret void }21  define amdgpu_ps void @flat_atomic() { ret void }22  define amdgpu_ps void @global_atomic() { ret void }23  define amdgpu_ps void @image_atomic() { ret void }24  define amdgpu_ps void @global_store_optnone() noinline optnone { ret void }25  define amdgpu_cs void @with_calls() { ret void }26  define fastcc void @with_tail_calls() { ret void }27  define amdgpu_cs void @waveslot_limited() { ret void }28...29 30---31name:            tbuffer_store132machineFunctionInfo:33  isEntryFunction: true34body:             |35  bb.0:36    ; OPT-LABEL: name: tbuffer_store137    ; OPT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec38    ; OPT-NEXT: S_NOP 039    ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m040    ; OPT-NEXT: S_ENDPGM 0, implicit $vgpr9741    ;42    ; NOOPT-LABEL: name: tbuffer_store143    ; NOOPT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec44    ; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr9745    TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec46    S_ENDPGM 0, implicit $vgpr9747...48 49---50name:            tbuffer_store251machineFunctionInfo:52  isEntryFunction: true53body:             |54  bb.0:55    ; OPT-LABEL: name: tbuffer_store256    ; OPT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (dereferenceable store (s128), align 1, addrspace 7)57    ; OPT-NEXT: S_NOP 058    ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m059    ; OPT-NEXT: S_ENDPGM 0, implicit $vgpr9760    ;61    ; NOOPT-LABEL: name: tbuffer_store262    ; NOOPT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (dereferenceable store (s128), align 1, addrspace 7)63    ; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr9764    TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (dereferenceable store (s128), align 1, addrspace 7)65    S_ENDPGM 0, implicit $vgpr9766...67 68---69name:            flat_store70machineFunctionInfo:71  isEntryFunction: true72body:             |73  bb.0:74    ; CHECK-LABEL: name: flat_store75    ; CHECK: FLAT_STORE_DWORDX4 $vgpr49_vgpr50, $vgpr26_vgpr27_vgpr28_vgpr29, 0, 0, implicit $exec, implicit $flat_scr76    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr9777    FLAT_STORE_DWORDX4 $vgpr49_vgpr50, $vgpr26_vgpr27_vgpr28_vgpr29, 0, 0, implicit $exec, implicit $flat_scr78    S_ENDPGM 0, implicit $vgpr9779...80 81---82name:            global_store83machineFunctionInfo:84  isEntryFunction: true85body:             |86  bb.0:87    ; OPT-LABEL: name: global_store88    ; OPT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec89    ; OPT-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 090    ; OPT-NEXT: S_NOP 091    ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m092    ; OPT-NEXT: S_ENDPGM 0, implicit $vgpr9793    ;94    ; NOOPT-LABEL: name: global_store95    ; NOOPT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec96    ; NOOPT-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 097    ; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr9798    GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec99    S_WAITCNT_VSCNT undef $sgpr_null, 0100    S_ENDPGM 0, implicit $vgpr97101...102 103---104name:            buffer_store_format105machineFunctionInfo:106  isEntryFunction: true107body:             |108  bb.0:109    ; OPT-LABEL: name: buffer_store_format110    ; OPT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec111    ; OPT-NEXT: S_NOP 0112    ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0113    ; OPT-NEXT: S_ENDPGM 0, implicit $vgpr97114    ;115    ; NOOPT-LABEL: name: buffer_store_format116    ; NOOPT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec117    ; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr97118    BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec119    S_ENDPGM 0, implicit $vgpr97120...121 122---123name:            ds_write_b32124machineFunctionInfo:125  isEntryFunction: true126body:             |127  bb.0:128    ; CHECK-LABEL: name: ds_write_b32129    ; CHECK: renamable $vgpr0 = IMPLICIT_DEF130    ; CHECK-NEXT: renamable $vgpr1 = IMPLICIT_DEF131    ; CHECK-NEXT: DS_WRITE_B32_gfx9 killed renamable $vgpr0, killed renamable $vgpr1, 12, 0, implicit $exec132    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97133    renamable $vgpr0 = IMPLICIT_DEF134    renamable $vgpr1 = IMPLICIT_DEF135    DS_WRITE_B32_gfx9 killed renamable $vgpr0, killed renamable $vgpr1, 12, 0, implicit $exec136    S_ENDPGM 0, implicit $vgpr97137 138...139---140name:            global_store_dword141machineFunctionInfo:142  isEntryFunction: true143body:             |144  bb.0:145    liveins: $vgpr0, $sgpr0_sgpr1146 147    ; OPT-LABEL: name: global_store_dword148    ; OPT: liveins: $vgpr0, $sgpr0_sgpr1149    ; OPT-NEXT: {{  $}}150    ; OPT-NEXT: renamable $vgpr0 = V_MAD_I32_I24_e64 killed $vgpr1, killed $vgpr0, killed $sgpr2, 0, implicit $exec151    ; OPT-NEXT: GLOBAL_STORE_DWORD_SADDR killed renamable $vgpr2, killed renamable $vgpr0, killed renamable $sgpr0_sgpr1, 0, 0, implicit $exec152    ; OPT-NEXT: S_NOP 0153    ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0154    ; OPT-NEXT: S_ENDPGM 0, implicit $vgpr97155    ;156    ; NOOPT-LABEL: name: global_store_dword157    ; NOOPT: liveins: $vgpr0, $sgpr0_sgpr1158    ; NOOPT-NEXT: {{  $}}159    ; NOOPT-NEXT: renamable $vgpr0 = V_MAD_I32_I24_e64 killed $vgpr1, killed $vgpr0, killed $sgpr2, 0, implicit $exec160    ; NOOPT-NEXT: GLOBAL_STORE_DWORD_SADDR killed renamable $vgpr2, killed renamable $vgpr0, killed renamable $sgpr0_sgpr1, 0, 0, implicit $exec161    ; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr97162    renamable $vgpr0 = V_MAD_I32_I24_e64 killed $vgpr1, killed $vgpr0, killed $sgpr2, 0, implicit $exec163    GLOBAL_STORE_DWORD_SADDR killed renamable $vgpr2, killed renamable $vgpr0, killed renamable $sgpr0_sgpr1, 0, 0, implicit $exec164    S_ENDPGM 0, implicit $vgpr97165...166 167---168name:            multiple_basic_blocks1169machineFunctionInfo:170  isEntryFunction: true171body:             |172  ; CHECK-LABEL: name: multiple_basic_blocks1173  ; CHECK: bb.0:174  ; CHECK-NEXT:   successors: %bb.1(0x80000000)175  ; CHECK-NEXT: {{  $}}176  ; CHECK-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec177  ; CHECK-NEXT:   S_BRANCH %bb.1178  ; CHECK-NEXT: {{  $}}179  ; CHECK-NEXT: bb.1:180  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)181  ; CHECK-NEXT: {{  $}}182  ; CHECK-NEXT:   S_WAITCNT 1015183  ; CHECK-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec184  ; CHECK-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc185  ; CHECK-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc186  ; CHECK-NEXT:   S_BRANCH %bb.2187  ; CHECK-NEXT: {{  $}}188  ; CHECK-NEXT: bb.2:189  ; CHECK-NEXT:   S_ENDPGM 0, implicit $vgpr97190  bb.0:191    successors: %bb.1192 193    renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec194    S_BRANCH %bb.1195 196  bb.1:197    successors: %bb.1, %bb.2198 199    $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec200    S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc201    S_CBRANCH_SCC1 %bb.1, implicit killed $scc202    S_BRANCH %bb.2203 204  bb.2:205    S_ENDPGM 0, implicit $vgpr97206 207...208 209 210# One block has a VMEM store as the last instruction, we should release the VGPRS211...212---213name:            multiple_basic_blocks2214machineFunctionInfo:215  isEntryFunction: true216body:             |217  ; OPT-LABEL: name: multiple_basic_blocks2218  ; OPT: bb.0:219  ; OPT-NEXT:   successors: %bb.2(0x80000000)220  ; OPT-NEXT: {{  $}}221  ; OPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec222  ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec223  ; OPT-NEXT:   S_BRANCH %bb.2224  ; OPT-NEXT: {{  $}}225  ; OPT-NEXT: bb.1:226  ; OPT-NEXT:   successors: %bb.2(0x80000000)227  ; OPT-NEXT: {{  $}}228  ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec229  ; OPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec230  ; OPT-NEXT:   S_BRANCH %bb.2231  ; OPT-NEXT: {{  $}}232  ; OPT-NEXT: bb.2:233  ; OPT-NEXT:   S_NOP 0234  ; OPT-NEXT:   S_SENDMSG 3, implicit $exec, implicit $m0235  ; OPT-NEXT:   S_ENDPGM 0, implicit $vgpr97236  ;237  ; NOOPT-LABEL: name: multiple_basic_blocks2238  ; NOOPT: bb.0:239  ; NOOPT-NEXT:   successors: %bb.2(0x80000000)240  ; NOOPT-NEXT: {{  $}}241  ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec242  ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec243  ; NOOPT-NEXT:   S_BRANCH %bb.2244  ; NOOPT-NEXT: {{  $}}245  ; NOOPT-NEXT: bb.1:246  ; NOOPT-NEXT:   successors: %bb.2(0x80000000)247  ; NOOPT-NEXT: {{  $}}248  ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec249  ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec250  ; NOOPT-NEXT:   S_BRANCH %bb.2251  ; NOOPT-NEXT: {{  $}}252  ; NOOPT-NEXT: bb.2:253  ; NOOPT-NEXT:   S_ENDPGM 0, implicit $vgpr97254  bb.0:255    successors: %bb.2256 257    TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec258    $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec259    S_BRANCH %bb.2260 261  bb.1:262    successors: %bb.2263 264    $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec265    TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec266    S_BRANCH %bb.2267 268  bb.2:269    S_ENDPGM 0, implicit $vgpr97270...271 272 273# One parent block has a VMEM store, release VGPRs274---275name:            multiple_basic_blocks3276machineFunctionInfo:277  isEntryFunction: true278body:             |279  ; OPT-LABEL: name: multiple_basic_blocks3280  ; OPT: bb.0:281  ; OPT-NEXT:   successors: %bb.2(0x80000000)282  ; OPT-NEXT: {{  $}}283  ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec284  ; OPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec285  ; OPT-NEXT:   S_BRANCH %bb.2286  ; OPT-NEXT: {{  $}}287  ; OPT-NEXT: bb.1:288  ; OPT-NEXT:   successors: %bb.2(0x80000000)289  ; OPT-NEXT: {{  $}}290  ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec291  ; OPT-NEXT:   S_BRANCH %bb.2292  ; OPT-NEXT: {{  $}}293  ; OPT-NEXT: bb.2:294  ; OPT-NEXT:   successors: %bb.4(0x80000000)295  ; OPT-NEXT: {{  $}}296  ; OPT-NEXT:   S_BRANCH %bb.4297  ; OPT-NEXT: {{  $}}298  ; OPT-NEXT: bb.3:299  ; OPT-NEXT:   successors: %bb.4(0x80000000)300  ; OPT-NEXT: {{  $}}301  ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec302  ; OPT-NEXT:   S_BRANCH %bb.4303  ; OPT-NEXT: {{  $}}304  ; OPT-NEXT: bb.4:305  ; OPT-NEXT:   S_NOP 0306  ; OPT-NEXT:   S_SENDMSG 3, implicit $exec, implicit $m0307  ; OPT-NEXT:   S_ENDPGM 0, implicit $vgpr97308  ;309  ; NOOPT-LABEL: name: multiple_basic_blocks3310  ; NOOPT: bb.0:311  ; NOOPT-NEXT:   successors: %bb.2(0x80000000)312  ; NOOPT-NEXT: {{  $}}313  ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec314  ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec315  ; NOOPT-NEXT:   S_BRANCH %bb.2316  ; NOOPT-NEXT: {{  $}}317  ; NOOPT-NEXT: bb.1:318  ; NOOPT-NEXT:   successors: %bb.2(0x80000000)319  ; NOOPT-NEXT: {{  $}}320  ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec321  ; NOOPT-NEXT:   S_BRANCH %bb.2322  ; NOOPT-NEXT: {{  $}}323  ; NOOPT-NEXT: bb.2:324  ; NOOPT-NEXT:   successors: %bb.4(0x80000000)325  ; NOOPT-NEXT: {{  $}}326  ; NOOPT-NEXT:   S_BRANCH %bb.4327  ; NOOPT-NEXT: {{  $}}328  ; NOOPT-NEXT: bb.3:329  ; NOOPT-NEXT:   successors: %bb.4(0x80000000)330  ; NOOPT-NEXT: {{  $}}331  ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec332  ; NOOPT-NEXT:   S_BRANCH %bb.4333  ; NOOPT-NEXT: {{  $}}334  ; NOOPT-NEXT: bb.4:335  ; NOOPT-NEXT:   S_ENDPGM 0, implicit $vgpr97336  bb.0:337    successors: %bb.2338 339    $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec340    TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec341    S_BRANCH %bb.2342 343  bb.1:344    successors: %bb.2345 346    $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec347    S_BRANCH %bb.2348 349  bb.2:350    successors: %bb.4351 352    S_BRANCH %bb.4353 354  bb.3:355    successors: %bb.4356 357    $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec358    S_BRANCH %bb.4359 360  bb.4:361    S_ENDPGM 0, implicit $vgpr97362...363 364---365name:            recursive_loop366machineFunctionInfo:367  isEntryFunction: true368body:             |369  ; CHECK-LABEL: name: recursive_loop370  ; CHECK: bb.0:371  ; CHECK-NEXT:   successors: %bb.1(0x80000000)372  ; CHECK-NEXT: {{  $}}373  ; CHECK-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec374  ; CHECK-NEXT:   S_BRANCH %bb.1375  ; CHECK-NEXT: {{  $}}376  ; CHECK-NEXT: bb.1:377  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)378  ; CHECK-NEXT: {{  $}}379  ; CHECK-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc380  ; CHECK-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc381  ; CHECK-NEXT:   S_BRANCH %bb.2382  ; CHECK-NEXT: {{  $}}383  ; CHECK-NEXT: bb.2:384  ; CHECK-NEXT:   S_ENDPGM 0, implicit $vgpr97385  bb.0:386    successors: %bb.1387 388    renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec389    S_BRANCH %bb.1390 391  bb.1:392    successors: %bb.1, %bb.2393 394    S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc395    S_CBRANCH_SCC1 %bb.1, implicit killed $scc396    S_BRANCH %bb.2397 398  bb.2:399    S_ENDPGM 0, implicit $vgpr97400...401 402---403name:            recursive_loop_vmem404machineFunctionInfo:405  isEntryFunction: true406body:             |407  ; OPT-LABEL: name: recursive_loop_vmem408  ; OPT: bb.0:409  ; OPT-NEXT:   successors: %bb.1(0x80000000)410  ; OPT-NEXT: {{  $}}411  ; OPT-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec412  ; OPT-NEXT:   S_BRANCH %bb.1413  ; OPT-NEXT: {{  $}}414  ; OPT-NEXT: bb.1:415  ; OPT-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)416  ; OPT-NEXT: {{  $}}417  ; OPT-NEXT:   S_WAITCNT 1015418  ; OPT-NEXT:   TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec419  ; OPT-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc420  ; OPT-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc421  ; OPT-NEXT:   S_BRANCH %bb.2422  ; OPT-NEXT: {{  $}}423  ; OPT-NEXT: bb.2:424  ; OPT-NEXT:   S_NOP 0425  ; OPT-NEXT:   S_SENDMSG 3, implicit $exec, implicit $m0426  ; OPT-NEXT:   S_ENDPGM 0, implicit $vgpr97427  ;428  ; NOOPT-LABEL: name: recursive_loop_vmem429  ; NOOPT: bb.0:430  ; NOOPT-NEXT:   successors: %bb.1(0x80000000)431  ; NOOPT-NEXT: {{  $}}432  ; NOOPT-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec433  ; NOOPT-NEXT:   S_BRANCH %bb.1434  ; NOOPT-NEXT: {{  $}}435  ; NOOPT-NEXT: bb.1:436  ; NOOPT-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)437  ; NOOPT-NEXT: {{  $}}438  ; NOOPT-NEXT:   S_WAITCNT 1015439  ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec440  ; NOOPT-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc441  ; NOOPT-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc442  ; NOOPT-NEXT:   S_BRANCH %bb.2443  ; NOOPT-NEXT: {{  $}}444  ; NOOPT-NEXT: bb.2:445  ; NOOPT-NEXT:   S_ENDPGM 0, implicit $vgpr97446  bb.0:447    successors: %bb.1448 449    renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec450    S_BRANCH %bb.1451 452  bb.1:453    successors: %bb.1, %bb.2454 455    TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec456    S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc457    S_CBRANCH_SCC1 %bb.1, implicit killed $scc458    S_BRANCH %bb.2459 460  bb.2:461    S_ENDPGM 0, implicit $vgpr97462...463 464---465name:            image_store466machineFunctionInfo:467  isEntryFunction: true468body:             |469  bb.0:470    ; OPT-LABEL: name: image_store471    ; OPT: IMAGE_STORE_V2_V1_gfx11 killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 12, 0, 1, 0, 0, -1, 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>), addrspace 7)472    ; OPT-NEXT: S_NOP 0473    ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0474    ; OPT-NEXT: S_ENDPGM 0, implicit $vgpr97475    ;476    ; NOOPT-LABEL: name: image_store477    ; NOOPT: IMAGE_STORE_V2_V1_gfx11 killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 12, 0, 1, 0, 0, -1, 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>), addrspace 7)478    ; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr97479  IMAGE_STORE_V2_V1_gfx11 killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 12, 0, 1, 0, 0, -1, 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>), addrspace 7)480  S_ENDPGM 0, implicit $vgpr97481...482 483---484name:            scratch_store485machineFunctionInfo:486  isEntryFunction: true487body:             |488  bb.0:489    ; CHECK-LABEL: name: scratch_store490    ; CHECK: renamable $sgpr0 = S_AND_B32 killed renamable $sgpr0, -16, implicit-def dead $scc491    ; CHECK-NEXT: SCRATCH_STORE_DWORD_SADDR killed renamable $vgpr0, killed renamable $sgpr0, 0, 0, implicit $exec, implicit $flat_scr492    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97493    renamable $sgpr0 = S_AND_B32 killed renamable $sgpr0, -16, implicit-def dead $scc494    SCRATCH_STORE_DWORD_SADDR killed renamable $vgpr0, killed renamable $sgpr0, 0, 0, implicit $exec, implicit $flat_scr495    S_ENDPGM 0, implicit $vgpr97496...497 498---499name:            buffer_atomic500machineFunctionInfo:501  isEntryFunction: true502body:             |503  bb.0:504    ; OPT-LABEL: name: buffer_atomic505    ; OPT: BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), align 1, addrspace 7)506    ; OPT-NEXT: S_NOP 0507    ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0508    ; OPT-NEXT: S_ENDPGM 0, implicit $vgpr97509    ;510    ; NOOPT-LABEL: name: buffer_atomic511    ; NOOPT: BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), align 1, addrspace 7)512    ; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr97513    BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), align 1, addrspace 7)514    S_ENDPGM 0, implicit $vgpr97515...516 517---518name:            flat_atomic519machineFunctionInfo:520  isEntryFunction: true521body:             |522  bb.0:523    ; CHECK-LABEL: name: flat_atomic524    ; CHECK: renamable $vgpr0_vgpr1 = FLAT_ATOMIC_DEC_X2_RTN killed renamable $vgpr0_vgpr1, killed renamable $vgpr2_vgpr3, 40, 1, implicit $exec, implicit $flat_scr525    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97526    renamable $vgpr0_vgpr1 = FLAT_ATOMIC_DEC_X2_RTN killed renamable $vgpr0_vgpr1, killed renamable $vgpr2_vgpr3, 40, 1, implicit $exec, implicit $flat_scr527    S_ENDPGM 0, implicit $vgpr97528...529 530 531---532name:            global_atomic533machineFunctionInfo:534  isEntryFunction: true535body:             |536  bb.0:537    ; CHECK-LABEL: name: global_atomic538    ; CHECK: renamable $vgpr0_vgpr1 = GLOBAL_ATOMIC_INC_X2_SADDR_RTN killed renamable $vgpr0, killed renamable $vgpr1_vgpr2, killed renamable $sgpr0_sgpr1, 40, 1, implicit $exec539    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97540    renamable $vgpr0_vgpr1 = GLOBAL_ATOMIC_INC_X2_SADDR_RTN killed renamable $vgpr0, killed renamable $vgpr1_vgpr2, killed renamable $sgpr0_sgpr1, 40, 1, implicit $exec541    S_ENDPGM 0, implicit $vgpr97542...543 544---545name:            image_atomic546machineFunctionInfo:547  isEntryFunction: true548body:             |549  bb.0:550    ; CHECK-LABEL: name: image_atomic551    ; CHECK: renamable $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_ATOMIC_CMPSWAP_V4_V1_gfx11 killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, 0, 1, 1, 0, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), addrspace 7)552    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97553    renamable $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_ATOMIC_CMPSWAP_V4_V1_gfx11 killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, 0, 1, 1, 0, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), addrspace 7)554    S_ENDPGM 0, implicit $vgpr97555...556 557---558name:            global_store_optnone559machineFunctionInfo:560  isEntryFunction: true561body:             |562  bb.0:563    ; CHECK-LABEL: name: global_store_optnone564    ; CHECK: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec565    ; CHECK-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0566    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97567    GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec568    S_WAITCNT_VSCNT undef $sgpr_null, 0569    S_ENDPGM 0, implicit $vgpr97570...571 572---573# Make sure we don't send DEALLOC_VGPRS after a call, since there might be574# scratch stores still in progress.575name:            with_calls576frameInfo:577  hasCalls:        true578body:             |579  bb.0:580    ; CHECK-LABEL: name: with_calls581    ; CHECK: S_WAITCNT 0582    ; CHECK-NEXT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec583    ; CHECK-NEXT: $sgpr30_sgpr31 = SI_CALL undef renamable $sgpr4_sgpr5, 0, csr_amdgpu584    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97585    GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec586    $sgpr30_sgpr31 = SI_CALL undef renamable $sgpr4_sgpr5, 0, csr_amdgpu587    S_ENDPGM 0, implicit $vgpr97588...589 590---591# Make sure we don't send DEALLOC_VGPRS when there's a tail call, since the592# only valid action after DEALLOC_VGPRS is to terminate the wave.593name:            with_tail_calls594frameInfo:595  hasCalls:        true596body:             |597  bb.0:598    ; CHECK-LABEL: name: with_tail_calls599    ; CHECK: S_WAITCNT 0600    ; CHECK-NEXT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr97, 0, 4, implicit $exec601    ; CHECK-NEXT: SI_TCRETURN undef renamable $sgpr4_sgpr5, @with_tail_calls, 0, csr_amdgpu602    GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr97, 0, 4, implicit $exec603    SI_TCRETURN undef renamable $sgpr4_sgpr5, @with_tail_calls, 0, csr_amdgpu604...605 606---607# Do not deallocate VGPRs if kernel uses a small enough number of VGPRs608# making it likely waveslot limited and not VGPR limited. For gfx11 that609# is 96 registers.610name:            waveslot_limited611frameInfo:612  hasCalls:        true613body:             |614  bb.0:615    ; CHECK-LABEL: name: waveslot_limited616    ; CHECK: S_WAITCNT 0617    ; CHECK-NEXT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr96, 0, 4, implicit $exec618    ; CHECK-NEXT: S_ENDPGM 0619    GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr96, 0, 4, implicit $exec620    S_ENDPGM 0621...622