diff options
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3_sched.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_sched.c b/src/gallium/drivers/freedreno/ir3/ir3_sched.c index cf09ceaf54b..24d7c6397c1 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_sched.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_sched.c @@ -162,7 +162,8 @@ static void schedule(struct ir3_sched_ctx *ctx, * Delay-slot calculation. Follows fanin/fanout. */ -static unsigned delay_calc2(struct ir3_sched_ctx *ctx, +/* calculate delay for specified src: */ +static unsigned delay_calc_srcn(struct ir3_sched_ctx *ctx, struct ir3_instruction *assigner, struct ir3_instruction *consumer, unsigned srcn) { @@ -173,7 +174,7 @@ static unsigned delay_calc2(struct ir3_sched_ctx *ctx, for (i = 1; i < assigner->regs_count; i++) { struct ir3_register *reg = assigner->regs[i]; if (reg->flags & IR3_REG_SSA) { - unsigned d = delay_calc2(ctx, reg->instr, + unsigned d = delay_calc_srcn(ctx, reg->instr, consumer, srcn); delay = MAX2(delay, d); } @@ -186,6 +187,7 @@ static unsigned delay_calc2(struct ir3_sched_ctx *ctx, return delay; } +/* calculate delay for instruction (maximum of delay for all srcs): */ static unsigned delay_calc(struct ir3_sched_ctx *ctx, struct ir3_instruction *instr) { @@ -194,7 +196,7 @@ static unsigned delay_calc(struct ir3_sched_ctx *ctx, for (i = 1; i < instr->regs_count; i++) { struct ir3_register *reg = instr->regs[i]; if (reg->flags & IR3_REG_SSA) { - unsigned d = delay_calc2(ctx, reg->instr, + unsigned d = delay_calc_srcn(ctx, reg->instr, instr, i - 1); delay = MAX2(delay, d); } |