Lines Matching refs:instr
46 #define di(instr, fmt, ...) \
51 ir3_print_instr_stream(stream, instr); \
79 struct ir3_instruction *instr;
94 has_sy_src(struct ir3_instruction *instr)
96 struct ir3_postsched_node *node = instr->data;
101 has_ss_src(struct ir3_instruction *instr)
103 struct ir3_postsched_node *node = instr->data;
108 schedule(struct ir3_postsched_ctx *ctx, struct ir3_instruction *instr)
110 assert(ctx->block == instr->block);
114 list_delinit(&instr->node);
116 di(instr, "schedule");
118 bool counts_for_delay = is_alu(instr) || is_flow(instr);
120 unsigned delay_cycles = counts_for_delay ? 1 + instr->repeat : 0;
122 struct ir3_postsched_node *n = instr->data;
136 list_addtail(&instr->node, &instr->block->instr_list);
140 if (is_meta(instr) && (instr->opc != OPC_META_TEX_PREFETCH))
143 if (is_ss_producer(instr)) {
144 ctx->ss_delay = soft_ss_delay(instr);
145 } else if (has_ss_src(instr)) {
151 if (is_sy_producer(instr)) {
152 ctx->sy_delay = soft_sy_delay(instr, ctx->block->shader);
153 } else if (has_sy_src(instr)) {
167 di(n->instr, "maxdel=%3d ", n->max_delay);
173 di(child->instr, " -> (%d parents) ", child->dag.parent_count);
209 if (!is_meta(n->instr))
217 di(chosen->instr, "prio: chose (meta)");
218 return chosen->instr;
226 if (!is_input(n->instr))
234 di(chosen->instr, "prio: chose (input)");
235 return chosen->instr;
245 if (!is_kill_or_demote(n->instr))
253 di(chosen->instr, "csp: chose (kill, hard ready)");
254 return chosen->instr;
264 if (!(is_ss_producer(n->instr) || is_sy_producer(n->instr)))
272 di(chosen->instr, "csp: chose (sfu/tex, soft ready)");
273 return chosen->instr;
305 di(chosen->instr, "csp: chose (soft ready)");
306 return chosen->instr;
324 di(chosen->instr, "csp: chose (hard ready)");
325 return chosen->instr;
336 di(chosen->instr, "csp: chose (leader)");
337 return chosen->instr;
403 unsigned d_soft = ir3_delayslots(dep->instr, node->instr, src_n, true);
404 d = ir3_delayslots_with_repeat(dep->instr, node->instr, dst_n, src_n);
406 if (is_sy_producer(dep->instr))
408 if (is_ss_producer(dep->instr))
425 * it corresponds to node->instr->srcs[src_n]. If src_n is negative, then
460 foreach_src_n (reg, i, node->instr) {
480 foreach_dst_n (reg, i, node->instr) {
506 foreach_instr (instr, &ctx->unscheduled_list) {
507 calculate_deps(&state, instr->data);
520 foreach_instr_rev (instr, &ctx->unscheduled_list) {
521 calculate_deps(&state, instr->data);
526 sched_node_init(struct ir3_postsched_ctx *ctx, struct ir3_instruction *instr)
533 n->instr = instr;
534 instr->data = n;
559 foreach_instr (instr, &ctx->unscheduled_list)
560 sched_node_init(ctx, instr);
586 foreach_instr (instr, &ctx->unscheduled_list) {
587 struct ir3_postsched_node *n = instr->data;
589 foreach_ssa_src_n (src, i, instr) {
590 if (src->block != instr->block)
600 if (src->block != instr->block)
606 if (is_input(instr)) {
607 util_dynarray_append(&inputs, struct ir3_instruction *, instr);
608 } else if (is_kill_or_demote(instr)) {
614 util_dynarray_append(&kills, struct ir3_instruction *, instr);
615 } else if (is_tex(instr) || is_mem(instr)) {
653 foreach_instr_safe (instr, &ctx->unscheduled_list) {
654 switch (instr->opc) {
658 list_delinit(&instr->node);
676 foreach_instr_safe (instr, &ctx->unscheduled_list)
677 if (instr->opc == OPC_META_INPUT)
678 schedule(ctx, instr);
680 foreach_instr_safe (instr, &ctx->unscheduled_list)
681 if (instr->opc == OPC_META_TEX_PREFETCH)
682 schedule(ctx, instr);
685 struct ir3_instruction *instr = choose_instr(ctx);
687 unsigned delay = node_delay(ctx, instr->data);
692 schedule(ctx, instr);
699 is_self_mov(struct ir3_instruction *instr)
701 if (!is_same_type_mov(instr))
704 if (instr->dsts[0]->num != instr->srcs[0]->num)
707 if (instr->dsts[0]->flags & IR3_REG_RELATIV)
710 if (instr->cat1.round != ROUND_ZERO)
713 if (instr->srcs[0]->flags &
731 foreach_instr_safe (instr, &block->instr_list) {
732 for (unsigned i = 0; i < instr->deps_count; i++) {
733 if (instr->deps[i] && is_self_mov(instr->deps[i])) {
734 instr->deps[i] = NULL;
738 if (is_self_mov(instr))
739 list_delinit(&instr->node);