1# RUN: llc -mtriple=amdgcn -mcpu=gfx940 -verify-machineinstrs -run-pass si-insert-waitcnts -o - %s | FileCheck -check-prefix=GCN %s 2 3# GCN-LABEL: name: buffer_load_dword_lds_ds_read 4# GCN: BUFFER_LOAD_DWORD_LDS_IDXEN 5# GCN-NEXT: S_WAITCNT 3952 6# vmcnt(0) 7# GCN-NEXT: DS_READ_B32_gfx9 8--- 9name: buffer_load_dword_lds_ds_read 10body: | 11 bb.0: 12 $m0 = S_MOV_B32 0 13 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4) 14 $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`) 15 S_ENDPGM 0 16 17... 18 19# GCN-LABEL: name: buffer_load_dword_lds_vmcnt_1 20# GCN: BUFFER_LOAD_DWORD_LDS_IDXEN 21# GCN-NEXT: BUFFER_LOAD_DWORD_IDXEN 22# GCN-NEXT: S_WAITCNT 3953 23# vmcnt(1) 24# GCN-NEXT: DS_READ_B32_gfx9 25--- 26name: buffer_load_dword_lds_vmcnt_1 27body: | 28 bb.0: 29 $m0 = S_MOV_B32 0 30 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`), (store (s32) into `ptr addrspace(3) undef`) 31 $vgpr10 = BUFFER_LOAD_DWORD_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`) 32 $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`) 33 S_ENDPGM 0 34 35... 36 37# GCN-LABEL: name: buffer_load_dword_lds_flat_read 38# GCN: BUFFER_LOAD_DWORD_LDS_IDXEN 39# GCN-NEXT: S_WAITCNT 3952 40# vmcnt(0) 41# GCN-NEXT: FLAT_LOAD_DWORD 42--- 43name: buffer_load_dword_lds_flat_read 44body: | 45 bb.0: 46 $m0 = S_MOV_B32 0 47 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`), (store (s32) into `ptr addrspace(3) undef`) 48 $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32) from `ptr undef`) 49 50 S_ENDPGM 0 51 52... 53 54# GCN-LABEL: name: global_load_lds_dword_ds_read 55# GCN: GLOBAL_LOAD_LDS_DWORD 56# GCN-NEXT: S_WAITCNT 3952 57# vmcnt(0) 58# GCN-NEXT: DS_READ_B32_gfx9 59--- 60name: global_load_lds_dword_ds_read 61body: | 62 bb.0: 63 $m0 = S_MOV_B32 0 64 GLOBAL_LOAD_LDS_DWORD $vgpr0_vgpr1, 4, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4) 65 $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`) 66 S_ENDPGM 0 67 68... 69 70# GCN-LABEL: name: scratch_load_lds_dword_ds_read 71# GCN: SCRATCH_LOAD_LDS_DWORD 72# GCN-NEXT: S_WAITCNT 3952 73# vmcnt(0) 74# GCN-NEXT: DS_READ_B32_gfx9 75--- 76name: scratch_load_lds_dword_ds_read 77body: | 78 bb.0: 79 $m0 = S_MOV_B32 0 80 SCRATCH_LOAD_LDS_DWORD $vgpr0, 4, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(5) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4) 81 $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`) 82 S_ENDPGM 0 83 84... 85 86# GCN-LABEL: name: buffer_store_lds_dword_ds_read 87# GCN: BUFFER_STORE_LDS_DWORD 88# GCN-NEXT: DS_READ_B32_gfx9 89--- 90name: buffer_store_lds_dword_ds_read 91body: | 92 bb.0: 93 $m0 = S_MOV_B32 0 94 BUFFER_STORE_LDS_DWORD $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(3) undef` + 4), (store (s32) into `ptr addrspace(1) undef` + 4) 95 $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`) 96 S_ENDPGM 0 97 98... 99 100# No need to wait before load from VMEM to LDS. 101# GCN-LABEL: name: series_of_buffer_load_dword_lds_ds_read 102# GCN: BUFFER_LOAD_DWORD_LDS_IDXEN 103# GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN 104# GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN 105# GCN-NEXT: S_WAITCNT 3952 106# vmcnt(0) 107# GCN-NEXT: DS_READ_B32_gfx9 108--- 109name: series_of_buffer_load_dword_lds_ds_read 110body: | 111 bb.0: 112 $m0 = S_MOV_B32 0 113 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`), (store (s32) into `ptr addrspace(3) undef`) 114 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4) 115 BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 8, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 8), (store (s32) into `ptr addrspace(3) undef` + 8) 116 $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`) 117 S_ENDPGM 0 118 119... 120