188 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass si-insert-waitcnts %s -o - | FileCheck %s2 3--- |4 define amdgpu_kernel void @basic_insert_dcache_wb() {5 ret void6 }7 8 define amdgpu_kernel void @explicit_flush_after() {9 ret void10 }11 12 define amdgpu_kernel void @explicit_flush_before() {13 ret void14 }15 16 define amdgpu_kernel void @no_scalar_store() {17 ret void18 }19 20 define amdgpu_kernel void @multi_block_store() {21 bb0:22 br i1 poison, label %bb1, label %bb223 24 bb1:25 ret void26 27 bb2:28 ret void29 }30 31 define amdgpu_kernel void @one_block_store() {32 bb0:33 br i1 poison, label %bb1, label %bb234 35 bb1:36 ret void37 38 bb2:39 ret void40 }41 42 define amdgpu_ps float @si_return() {43 ret float poison44 }45 46...47---48# CHECK-LABEL: name: basic_insert_dcache_wb49# CHECK: bb.0:50# CHECK-NEXT: S_STORE_DWORD51# CHECK-NEXT: S_DCACHE_WB52# CHECK-NEXT: S_ENDPGM 053 54name: basic_insert_dcache_wb55tracksRegLiveness: false56machineFunctionInfo:57 isEntryFunction: true58 59body: |60 bb.0:61 S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 062 S_ENDPGM 063...64---65# Already has an explicitly requested flush after the last store.66# CHECK-LABEL: name: explicit_flush_after67# CHECK: bb.0:68# CHECK-NEXT: S_STORE_DWORD69# CHECK-NEXT: S_DCACHE_WB70# CHECK-NEXT: S_ENDPGM 071 72name: explicit_flush_after73tracksRegLiveness: false74machineFunctionInfo:75 isEntryFunction: true76 77body: |78 bb.0:79 S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 080 S_DCACHE_WB81 S_ENDPGM 082...83---84# Already has an explicitly requested flush before the last store.85# CHECK-LABEL: name: explicit_flush_before86# CHECK: bb.0:87# CHECK-NEXT: S_DCACHE_WB88# CHECK-NEXT: S_STORE_DWORD89# CHECK-NEXT: S_DCACHE_WB90# CHECK-NEXT: S_ENDPGM 091 92name: explicit_flush_before93tracksRegLiveness: false94machineFunctionInfo:95 isEntryFunction: true96 97body: |98 bb.0:99 S_DCACHE_WB100 S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0101 S_ENDPGM 0102...103---104# CHECK-LABEL: no_scalar_store105# CHECK: bb.0106# CHECK-NEXT: S_ENDPGM 0107name: no_scalar_store108tracksRegLiveness: false109machineFunctionInfo:110 isEntryFunction: true111 112body: |113 bb.0:114 S_ENDPGM 0115...116 117# CHECK-LABEL: name: multi_block_store118# CHECK: bb.0:119# CHECK-NEXT: S_STORE_DWORD120# CHECK-NEXT: S_DCACHE_WB121# CHECK-NEXT: S_ENDPGM 0122 123# CHECK: bb.1:124# CHECK-NEXT: S_STORE_DWORD125# CHECK-NEXT: S_DCACHE_WB126# CHECK-NEXT: S_ENDPGM 0127 128name: multi_block_store129tracksRegLiveness: false130machineFunctionInfo:131 isEntryFunction: true132 133body: |134 bb.0:135 S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0136 S_ENDPGM 0137 138 bb.1:139 S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0140 S_ENDPGM 0141...142...143 144# This one should be able to omit the flush in the storeless block but145# this isn't handled now.146 147# CHECK-LABEL: name: one_block_store148# CHECK: bb.0:149# CHECK-NEXT: S_DCACHE_WB150# CHECK-NEXT: S_ENDPGM 0151 152# CHECK: bb.1:153# CHECK-NEXT: S_STORE_DWORD154# CHECK-NEXT: S_DCACHE_WB155# CHECK-NEXT: S_ENDPGM 0156 157name: one_block_store158tracksRegLiveness: false159machineFunctionInfo:160 isEntryFunction: true161 162body: |163 bb.0:164 S_ENDPGM 0165 166 bb.1:167 S_STORE_DWORD_SGPR undef $sgpr4, undef $sgpr6_sgpr7, undef $m0, 0168 S_ENDPGM 0169...170---171# CHECK-LABEL: name: si_return172# CHECK: bb.0:173# CHECK-NEXT: S_STORE_DWORD174# CHECK-NEXT: S_WAITCNT175# CHECK-NEXT: S_DCACHE_WB176# CHECK-NEXT: SI_RETURN177 178name: si_return179tracksRegLiveness: false180machineFunctionInfo:181 isEntryFunction: true182 183body: |184 bb.0:185 S_STORE_DWORD_SGPR undef $sgpr2, undef $sgpr0_sgpr1, undef $m0, 0186 SI_RETURN_TO_EPILOG undef $vgpr0187...188