Lines Matching refs:imm
115 wait_imm imm;
123 : imm(imm_), events(event_), counters(get_counters_for_event(event_)),
133 changed |= imm.combine(other.imm);
145 imm.lgkm = wait_imm::unset_counter;
150 imm.vm = wait_imm::unset_counter;
156 imm.exp = wait_imm::unset_counter;
162 imm.vs = wait_imm::unset_counter;
272 wait.combine(it->second.imm);
296 wait.combine(it->second.imm);
302 parse_wait_instr(wait_ctx& ctx, wait_imm& imm, Instruction* instr)
306 imm.vs = std::min<uint8_t>(imm.vs, instr->sopk().imm);
309 imm.combine(wait_imm(ctx.gfx_level, instr->sopp().imm));
316 perform_barrier(wait_ctx& ctx, wait_imm& imm, memory_sync_info sync, unsigned semantics)
338 imm.combine(ctx.barrier_imm[idx]);
344 force_waitcnt(wait_ctx& ctx, wait_imm& imm)
347 imm.vm = 0;
349 imm.exp = 0;
351 imm.lgkm = 0;
355 imm.vs = 0;
360 kill(wait_imm& imm, Instruction* instr, wait_ctx& ctx, memory_sync_info sync_info)
367 force_waitcnt(ctx, imm);
371 check_instr(ctx, imm, instr);
378 imm.lgkm = 0;
390 imm.lgkm = 0;
403 imm.vs = 0;
405 imm.vm = 0;
410 perform_barrier(ctx, imm, instr->barrier().sync, semantic_acqrel);
412 perform_barrier(ctx, imm, sync_info, semantic_release);
414 if (!imm.empty()) {
415 if (ctx.pending_flat_vm && imm.vm != wait_imm::unset_counter)
416 imm.vm = 0;
417 if (ctx.pending_flat_lgkm && imm.lgkm != wait_imm::unset_counter)
418 imm.lgkm = 0;
421 ctx.exp_cnt = std::min(ctx.exp_cnt, imm.exp);
422 ctx.vm_cnt = std::min(ctx.vm_cnt, imm.vm);
423 ctx.lgkm_cnt = std::min(ctx.lgkm_cnt, imm.lgkm);
424 ctx.vs_cnt = std::min(ctx.vs_cnt, imm.vs);
430 if (bar.exp != wait_imm::unset_counter && imm.exp <= bar.exp) {
434 if (bar.vm != wait_imm::unset_counter && imm.vm <= bar.vm) {
438 if (bar.lgkm != wait_imm::unset_counter && imm.lgkm <= bar.lgkm) {
442 if (bar.vs != wait_imm::unset_counter && imm.vs <= bar.vs) {
453 if (imm.exp != wait_imm::unset_counter && imm.exp <= it->second.imm.exp)
455 if (imm.vm != wait_imm::unset_counter && imm.vm <= it->second.imm.vm)
457 if (imm.lgkm != wait_imm::unset_counter && imm.lgkm <= it->second.imm.lgkm)
459 if (imm.vs != wait_imm::unset_counter && imm.vs <= it->second.imm.vs)
468 if (imm.vm == 0)
470 if (imm.lgkm == 0) {
545 entry.imm.exp < ctx.max_exp_cnt)
546 entry.imm.exp++;
548 entry.imm.lgkm < ctx.max_lgkm_cnt)
549 entry.imm.lgkm++;
551 entry.imm.vm < ctx.max_vm_cnt)
552 entry.imm.vm++;
554 entry.imm.vs < ctx.max_vs_cnt)
555 entry.imm.vs++;
573 e.second.imm.vm = 0;
575 e.second.imm.lgkm = 0;
586 wait_imm imm;
588 imm.lgkm = 0;
590 imm.vm = 0;
592 imm.exp = 0;
594 imm.vs = 0;
596 wait_entry new_entry(event, imm, !rc.is_linear(), wait_on_read);
716 emit_waitcnt(wait_ctx& ctx, std::vector<aco_ptr<Instruction>>& instructions, wait_imm& imm)
718 if (imm.vs != wait_imm::unset_counter) {
723 waitcnt_vs->imm = imm.vs;
725 imm.vs = wait_imm::unset_counter;
727 if (!imm.empty()) {
730 waitcnt->imm = imm.pack(ctx.gfx_level);
734 imm = wait_imm();