"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/amd/compiler/aco_insert_waitcnt.cpp" between
mesa-20.0.0-rc2.tar.xz and mesa-20.0.0-rc3.tar.xz

About: Mesa is an open-source implementation of the OpenGL specification - a system for rendering interactive 3D graphics (main library code). Release candidate.

aco_insert_waitcnt.cpp  (mesa-20.0.0-rc2.tar.xz):aco_insert_waitcnt.cpp  (mesa-20.0.0-rc3.tar.xz)
skipping to change at line 377 skipping to change at line 377
} }
wait_imm kill(Instruction* instr, wait_ctx& ctx) wait_imm kill(Instruction* instr, wait_ctx& ctx)
{ {
wait_imm imm; wait_imm imm;
if (ctx.exp_cnt || ctx.vm_cnt || ctx.lgkm_cnt) if (ctx.exp_cnt || ctx.vm_cnt || ctx.lgkm_cnt)
imm.combine(check_instr(instr, ctx)); imm.combine(check_instr(instr, ctx));
imm.combine(parse_wait_instr(ctx, instr)); imm.combine(parse_wait_instr(ctx, instr));
if (ctx.chip_class >= GFX10) { /* It's required to wait for scalar stores before "writing back" data.
/* Seems to be required on GFX10 to achieve correct behaviour. * It shouldn't cost anything anyways since we're about to do s_endpgm.
* It shouldn't cost anything anyways since we're about to do s_endpgm. */
*/ if (ctx.lgkm_cnt && instr->opcode == aco_opcode::s_dcache_wb) {
if (ctx.lgkm_cnt && instr->opcode == aco_opcode::s_dcache_wb) assert(ctx.chip_class >= GFX8);
imm.lgkm = 0; imm.lgkm = 0;
}
if (ctx.chip_class >= GFX10) {
/* GFX10: A store followed by a load at the same address causes a problem because /* GFX10: A store followed by a load at the same address causes a problem because
* the load doesn't load the correct values unless we wait for the store f irst. * the load doesn't load the correct values unless we wait for the store f irst.
* This is NOT mitigated by an s_nop. * This is NOT mitigated by an s_nop.
* *
* TODO: Refine this when we have proper alias analysis. * TODO: Refine this when we have proper alias analysis.
*/ */
SMEM_instruction *smem = static_cast<SMEM_instruction *>(instr); SMEM_instruction *smem = static_cast<SMEM_instruction *>(instr);
if (ctx.pending_s_buffer_store && if (ctx.pending_s_buffer_store &&
!smem->definitions.empty() && !smem->definitions.empty() &&
!smem->can_reorder && smem->barrier == barrier_buffer) { !smem->can_reorder && smem->barrier == barrier_buffer) {
 End of changes. 2 change blocks. 
6 lines changed or deleted 8 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)