134 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -mcpu=gfx942 -verify-machineinstrs -run-pass si-insert-waitcnts -o - %s | FileCheck -check-prefix=GCN %s3 4 5# Expected vmcnt(0) since the direct load is the only load.6---7name: dma_then_fence8body: |9 bb.0:10 ; GCN-LABEL: name: dma_then_fence11 ; GCN: S_WAITCNT 012 ; GCN-NEXT: $m0 = S_MOV_B32 013 ; GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4, addrspace 1), (store (s32) into `ptr addrspace(3) poison` + 4, addrspace 3)14 ; GCN-NEXT: S_WAITCNT 395215 ; GCN-NEXT: $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec16 ; GCN-NEXT: S_ENDPGM 017 $m0 = S_MOV_B32 018 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4), (store (s32) into `ptr addrspace(3) poison` + 4)19 S_WAITCNT_lds_direct20 $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec21 S_ENDPGM 022 23...24 25# Expected vmcnt(1) since the global load is not processed by SIInsertWaitcnts.26 27---28name: dma_then_global_load29body: |30 bb.0:31 ; GCN-LABEL: name: dma_then_global_load32 ; GCN: S_WAITCNT 033 ; GCN-NEXT: $m0 = S_MOV_B32 034 ; GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4, addrspace 1), (store (s32) into `ptr addrspace(3) poison` + 4, addrspace 3)35 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec36 ; GCN-NEXT: S_WAITCNT 395337 ; GCN-NEXT: $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec38 ; GCN-NEXT: S_ENDPGM 039 $m0 = S_MOV_B32 040 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4), (store (s32) into `ptr addrspace(3) poison` + 4)41 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec42 S_WAITCNT_lds_direct43 $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec44 S_ENDPGM 045 46...47 48# Expected no vmcnt since there is no direct load to LDS, and the global load is not processed by SIInsertWaitcnts.49 50---51name: no_dma_just_fence52body: |53 bb.0:54 ; GCN-LABEL: name: no_dma_just_fence55 ; GCN: S_WAITCNT 056 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec57 ; GCN-NEXT: $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec58 ; GCN-NEXT: S_ENDPGM 059 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec60 S_WAITCNT_lds_direct61 $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec62 S_ENDPGM 063 64...65 66# Expected vmcnt(1) since the global load is not processed by SIInsertWaitcnts.67 68---69name: dma_then_system_fence70body: |71 bb.0:72 ; GCN-LABEL: name: dma_then_system_fence73 ; GCN: S_WAITCNT 074 ; GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4, addrspace 1), (store (s32) into `ptr addrspace(3) poison` + 4, addrspace 3)75 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec76 ; GCN-NEXT: S_WAITCNT 395377 ; GCN-NEXT: $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec78 ; GCN-NEXT: S_ENDPGM 079 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4), (store (s32) into `ptr addrspace(3) poison` + 4)80 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec81 S_WAITCNT_lds_direct82 $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec83 S_ENDPGM 084 85...86 87# The computed vmcnt(1) gets merged with the existing vmcnt(0).88 89---90name: merge_with_prev_wait91body: |92 bb.0:93 ; GCN-LABEL: name: merge_with_prev_wait94 ; GCN: S_WAITCNT 095 ; GCN-NEXT: $m0 = S_MOV_B32 096 ; GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4, addrspace 1), (store (s32) into `ptr addrspace(3) poison` + 4, addrspace 3)97 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec98 ; GCN-NEXT: S_WAITCNT 395299 ; GCN-NEXT: $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec100 ; GCN-NEXT: S_ENDPGM 0101 $m0 = S_MOV_B32 0102 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4), (store (s32) into `ptr addrspace(3) poison` + 4)103 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec104 S_WAITCNT 3952105 S_WAITCNT_lds_direct106 $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec107 S_ENDPGM 0108 109...110 111# The computed vmcnt(1) gets merged with the existing vmcnt(0).112 113---114name: merge_with_next_wait115body: |116 bb.0:117 ; GCN-LABEL: name: merge_with_next_wait118 ; GCN: S_WAITCNT 0119 ; GCN-NEXT: $m0 = S_MOV_B32 0120 ; GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4, addrspace 1), (store (s32) into `ptr addrspace(3) poison` + 4, addrspace 3)121 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec122 ; GCN-NEXT: S_WAITCNT 3952123 ; GCN-NEXT: $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec124 ; GCN-NEXT: S_ENDPGM 0125 $m0 = S_MOV_B32 0126 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) poison` + 4), (store (s32) into `ptr addrspace(3) poison` + 4)127 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec128 S_WAITCNT_lds_direct129 S_WAITCNT 3952130 $vgpr1 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec131 S_ENDPGM 0132 133...134