brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.1 KiB · 6983a27 Raw
235 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -mcpu=gfx90a -run-pass si-insert-waitcnts %s -o - | FileCheck -check-prefix=GFX9 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass si-insert-waitcnts %s -o - | FileCheck -check-prefix=GFX12 %s4 5# There shall be no S_WAITCNT between two stores.6 7---8name: spill_vgpr_tuple9 10body: |11  bb.0:12    liveins: $vgpr0_vgpr1, $sgpr76_sgpr77_sgpr78_sgpr7913 14    ; GFX9-LABEL: name: spill_vgpr_tuple15    ; GFX9: liveins: $vgpr0_vgpr1, $sgpr76_sgpr77_sgpr78_sgpr7916    ; GFX9-NEXT: {{  $}}17    ; GFX9-NEXT: S_WAITCNT 018    ; GFX9-NEXT: $vgpr64_vgpr65 = V_MOV_B64_e32 $vgpr0_vgpr1, implicit $exec19    ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr64, $sgpr76_sgpr77_sgpr78_sgpr79, 0, 672, 0, 0, implicit $exec, implicit-def $vgpr64_vgpr65, implicit $vgpr64_vgpr6520    ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr65, $sgpr76_sgpr77_sgpr78_sgpr79, 0, 676, 0, 0, implicit $exec, implicit $vgpr64_vgpr6521    ; GFX9-NEXT: S_ENDPGM 022    ;23    ; GFX12-LABEL: name: spill_vgpr_tuple24    ; GFX12: liveins: $vgpr0_vgpr1, $sgpr76_sgpr77_sgpr78_sgpr7925    ; GFX12-NEXT: {{  $}}26    ; GFX12-NEXT: S_WAIT_LOADCNT_DSCNT 027    ; GFX12-NEXT: S_WAIT_EXPCNT 028    ; GFX12-NEXT: S_WAIT_SAMPLECNT 029    ; GFX12-NEXT: S_WAIT_BVHCNT 030    ; GFX12-NEXT: S_WAIT_KMCNT 031    ; GFX12-NEXT: $vgpr64_vgpr65 = V_MOV_B64_e32 $vgpr0_vgpr1, implicit $exec32    ; GFX12-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr64, $sgpr76_sgpr77_sgpr78_sgpr79, 0, 672, 0, 0, implicit $exec, implicit-def $vgpr64_vgpr65, implicit $vgpr64_vgpr6533    ; GFX12-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr65, $sgpr76_sgpr77_sgpr78_sgpr79, 0, 676, 0, 0, implicit $exec, implicit $vgpr64_vgpr6534    ; GFX12-NEXT: S_ENDPGM 035    $vgpr64_vgpr65 = V_MOV_B64_e32 $vgpr0_vgpr1, implicit $exec36    BUFFER_STORE_DWORD_OFFSET killed $vgpr64, $sgpr76_sgpr77_sgpr78_sgpr79, 0, 672, 0, 0, implicit $exec, implicit-def $vgpr64_vgpr65, implicit $vgpr64_vgpr6537    BUFFER_STORE_DWORD_OFFSET $vgpr65, $sgpr76_sgpr77_sgpr78_sgpr79, 0, 676, 0, 0, implicit $exec, implicit $vgpr64_vgpr6538    S_ENDPGM 039...40 41# Make sure that while ignoring implicit operands we will not ignore implicit $vcc on VALU42 43---44name: load_vcc_wait45 46body: |47  bb.0:48    liveins: $vgpr0, $sgpr10_sgpr1149 50    ; GFX9-LABEL: name: load_vcc_wait51    ; GFX9: liveins: $vgpr0, $sgpr10_sgpr1152    ; GFX9-NEXT: {{  $}}53    ; GFX9-NEXT: S_WAITCNT 054    ; GFX9-NEXT: $vcc_lo = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 055    ; GFX9-NEXT: S_WAITCNT 4927956    ; GFX9-NEXT: $vgpr1 = V_ADDC_U32_e32 0, $vgpr0, implicit-def $vcc, implicit $vcc, implicit $exec57    ; GFX9-NEXT: S_ENDPGM 058    ;59    ; GFX12-LABEL: name: load_vcc_wait60    ; GFX12: liveins: $vgpr0, $sgpr10_sgpr1161    ; GFX12-NEXT: {{  $}}62    ; GFX12-NEXT: S_WAIT_LOADCNT_DSCNT 063    ; GFX12-NEXT: S_WAIT_EXPCNT 064    ; GFX12-NEXT: S_WAIT_SAMPLECNT 065    ; GFX12-NEXT: S_WAIT_BVHCNT 066    ; GFX12-NEXT: S_WAIT_KMCNT 067    ; GFX12-NEXT: $vcc_lo = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 068    ; GFX12-NEXT: S_WAIT_KMCNT 069    ; GFX12-NEXT: $vgpr1 = V_ADDC_U32_e32 0, $vgpr0, implicit-def $vcc_lo, implicit $vcc_lo, implicit $exec70    ; GFX12-NEXT: S_ENDPGM 071    $vcc_lo = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 072    $vgpr1 = V_ADDC_U32_e32 0, $vgpr0, implicit-def $vcc, implicit $vcc, implicit $exec73    S_ENDPGM 074...75 76# Make sure that while ignoring implicit operands we will not ignore implicit $flat_src on FLAT77 78---79name: load_flat_scr_lo_flat_load_wait80 81body: |82  bb.0:83    liveins: $sgpr10_sgpr11, $vgpr0_vgpr184 85    ; GFX9-LABEL: name: load_flat_scr_lo_flat_load_wait86    ; GFX9: liveins: $sgpr10_sgpr11, $vgpr0_vgpr187    ; GFX9-NEXT: {{  $}}88    ; GFX9-NEXT: S_WAITCNT 089    ; GFX9-NEXT: $flat_scr_lo = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 090    ; GFX9-NEXT: S_WAITCNT 4927991    ; GFX9-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr92    ; GFX9-NEXT: S_ENDPGM 093    ;94    ; GFX12-LABEL: name: load_flat_scr_lo_flat_load_wait95    ; GFX12: liveins: $sgpr10_sgpr11, $vgpr0_vgpr196    ; GFX12-NEXT: {{  $}}97    ; GFX12-NEXT: S_WAIT_LOADCNT_DSCNT 098    ; GFX12-NEXT: S_WAIT_EXPCNT 099    ; GFX12-NEXT: S_WAIT_SAMPLECNT 0100    ; GFX12-NEXT: S_WAIT_BVHCNT 0101    ; GFX12-NEXT: S_WAIT_KMCNT 0102    ; GFX12-NEXT: $flat_scr_lo = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 0103    ; GFX12-NEXT: S_WAIT_KMCNT 0104    ; GFX12-NEXT: $vgpr2 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr105    ; GFX12-NEXT: S_ENDPGM 0106    $flat_scr_lo = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 0107    $vgpr2 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr108    S_ENDPGM 0109...110 111---112name: load_flat_scr_lo_scratch_store_wait113 114body: |115  bb.0:116    liveins: $sgpr10_sgpr11, $vgpr0, $sgpr32117 118    ; GFX9-LABEL: name: load_flat_scr_lo_scratch_store_wait119    ; GFX9: liveins: $sgpr10_sgpr11, $vgpr0, $sgpr32120    ; GFX9-NEXT: {{  $}}121    ; GFX9-NEXT: S_WAITCNT 0122    ; GFX9-NEXT: $flat_scr_hi = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 0123    ; GFX9-NEXT: S_WAITCNT 49279124    ; GFX9-NEXT: SCRATCH_STORE_DWORD_SADDR $vgpr0, $sgpr32, 0, 0, implicit $exec, implicit $flat_scr125    ; GFX9-NEXT: S_ENDPGM 0126    ;127    ; GFX12-LABEL: name: load_flat_scr_lo_scratch_store_wait128    ; GFX12: liveins: $sgpr10_sgpr11, $vgpr0, $sgpr32129    ; GFX12-NEXT: {{  $}}130    ; GFX12-NEXT: S_WAIT_LOADCNT_DSCNT 0131    ; GFX12-NEXT: S_WAIT_EXPCNT 0132    ; GFX12-NEXT: S_WAIT_SAMPLECNT 0133    ; GFX12-NEXT: S_WAIT_BVHCNT 0134    ; GFX12-NEXT: S_WAIT_KMCNT 0135    ; GFX12-NEXT: $flat_scr_hi = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 0136    ; GFX12-NEXT: S_WAIT_KMCNT 0137    ; GFX12-NEXT: SCRATCH_STORE_DWORD_SADDR $vgpr0, $sgpr32, 0, 0, implicit $exec, implicit $flat_scr138    ; GFX12-NEXT: S_ENDPGM 0139    $flat_scr_hi = S_LOAD_DWORD_IMM $sgpr10_sgpr11, 0, 0140    SCRATCH_STORE_DWORD_SADDR $vgpr0, $sgpr32, 0, 0, implicit $exec, implicit $flat_scr141    S_ENDPGM 0142...143 144# Check that implicit spill defs do not force wait to zero on the first store145 146---147name: spill_load_store148 149body: |150  bb.0:151    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32152 153    ; GFX9-LABEL: name: spill_load_store154    ; GFX9: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32155    ; GFX9-NEXT: {{  $}}156    ; GFX9-NEXT: S_WAITCNT 0157    ; GFX9-NEXT: $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 8, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3158    ; GFX9-NEXT: $vgpr1 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 12, 0, 0, implicit $exec159    ; GFX9-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 16, 0, 0, implicit $exec160    ; GFX9-NEXT: $vgpr3 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 20, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3161    ; GFX9-NEXT: S_WAITCNT 3955162    ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 40, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr0_vgpr1_vgpr2_vgpr3163    ; GFX9-NEXT: S_WAITCNT 3955164    ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 44, 0, 0, implicit $exec165    ; GFX9-NEXT: S_WAITCNT 3955166    ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 48, 0, 0, implicit $exec167    ; GFX9-NEXT: S_WAITCNT 3955168    ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr3, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 52, 0, 0, implicit $exec, implicit killed $vgpr0_vgpr1_vgpr2_vgpr3169    ; GFX9-NEXT: S_ENDPGM 0170    ;171    ; GFX12-LABEL: name: spill_load_store172    ; GFX12: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32173    ; GFX12-NEXT: {{  $}}174    ; GFX12-NEXT: S_WAIT_LOADCNT_DSCNT 0175    ; GFX12-NEXT: S_WAIT_EXPCNT 0176    ; GFX12-NEXT: S_WAIT_SAMPLECNT 0177    ; GFX12-NEXT: S_WAIT_BVHCNT 0178    ; GFX12-NEXT: S_WAIT_KMCNT 0179    ; GFX12-NEXT: $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 8, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3180    ; GFX12-NEXT: $vgpr1 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 12, 0, 0, implicit $exec181    ; GFX12-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 16, 0, 0, implicit $exec182    ; GFX12-NEXT: $vgpr3 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 20, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3183    ; GFX12-NEXT: S_WAIT_LOADCNT 3184    ; GFX12-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 40, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr0_vgpr1_vgpr2_vgpr3185    ; GFX12-NEXT: S_WAIT_LOADCNT 2186    ; GFX12-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 44, 0, 0, implicit $exec187    ; GFX12-NEXT: S_WAIT_LOADCNT 1188    ; GFX12-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 48, 0, 0, implicit $exec189    ; GFX12-NEXT: S_WAIT_LOADCNT 0190    ; GFX12-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr3, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 52, 0, 0, implicit $exec, implicit killed $vgpr0_vgpr1_vgpr2_vgpr3191    ; GFX12-NEXT: S_ENDPGM 0192    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 8, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3193    $vgpr1 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 12, 0, 0, implicit $exec194    $vgpr2 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 16, 0, 0, implicit $exec195    $vgpr3 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 20, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3196    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 40, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr0_vgpr1_vgpr2_vgpr3197    BUFFER_STORE_DWORD_OFFSET killed $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 44, 0, 0, implicit $exec198    BUFFER_STORE_DWORD_OFFSET killed $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 48, 0, 0, implicit $exec199    BUFFER_STORE_DWORD_OFFSET killed $vgpr3, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 52, 0, 0, implicit $exec, implicit killed $vgpr0_vgpr1_vgpr2_vgpr3200    S_ENDPGM 0201...202 203# Make sure we have wait to mitigate WAW on gfx12204 205---206name: scratch_load_waw207body:             |208  bb.0.entry:209    liveins: $vgpr0, $sgpr0210 211    ; GFX9-LABEL: name: scratch_load_waw212    ; GFX9: liveins: $vgpr0, $sgpr0213    ; GFX9-NEXT: {{  $}}214    ; GFX9-NEXT: S_WAITCNT 0215    ; GFX9-NEXT: $vgpr2 = SCRATCH_LOAD_DWORD $vgpr0, 0, 0, implicit $exec, implicit $flat_scr216    ; GFX9-NEXT: $vgpr2 = SCRATCH_LOAD_SHORT_D16_HI_SADDR $sgpr0, 0, 0, $vgpr2, implicit $exec, implicit $flat_scr217    ; GFX9-NEXT: S_ENDPGM 0218    ;219    ; GFX12-LABEL: name: scratch_load_waw220    ; GFX12: liveins: $vgpr0, $sgpr0221    ; GFX12-NEXT: {{  $}}222    ; GFX12-NEXT: S_WAIT_LOADCNT_DSCNT 0223    ; GFX12-NEXT: S_WAIT_EXPCNT 0224    ; GFX12-NEXT: S_WAIT_SAMPLECNT 0225    ; GFX12-NEXT: S_WAIT_BVHCNT 0226    ; GFX12-NEXT: S_WAIT_KMCNT 0227    ; GFX12-NEXT: $vgpr2 = SCRATCH_LOAD_DWORD $vgpr0, 0, 0, implicit $exec, implicit $flat_scr228    ; GFX12-NEXT: S_WAIT_LOADCNT 0229    ; GFX12-NEXT: $vgpr2 = SCRATCH_LOAD_SHORT_D16_HI_SADDR $sgpr0, 0, 0, $vgpr2, implicit $exec, implicit $flat_scr230    ; GFX12-NEXT: S_ENDPGM 0231    $vgpr2 = SCRATCH_LOAD_DWORD $vgpr0, 0, 0, implicit $exec, implicit $flat_scr232    $vgpr2 = SCRATCH_LOAD_SHORT_D16_HI_SADDR $sgpr0, 0, 0, $vgpr2, implicit $exec, implicit $flat_scr233    S_ENDPGM 0234...235