diff options
author | Rob Clark <[email protected]> | 2015-06-29 14:49:08 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2015-06-30 12:13:44 -0400 |
commit | 00b6b41482985ba4a81fbb479a47c06ec83f3797 (patch) | |
tree | 550957bcdf4dea96ac052b92971a1320e8608b26 /src/gallium/drivers/freedreno/ir3/ir3.c | |
parent | 906da495272b1be4c278f5f7402594e3c52521c1 (diff) |
freedreno/ir3: cache defining instruction
It is silly to traverse back to find first instruction that writes part
of a larger "virtual" register many times per instruction (plus per use
as a src to later instructions). Cache this information so we only
figure it out once.
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/ir3/ir3.c')
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3.c b/src/gallium/drivers/freedreno/ir3/ir3.c index 6f6dad59793..1da6cf0477e 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.c +++ b/src/gallium/drivers/freedreno/ir3/ir3.c @@ -722,15 +722,16 @@ ir3_clear_mark(struct ir3 *ir) } /* note: this will destroy instr->depth, don't do it until after sched! */ -void +unsigned ir3_count_instructions(struct ir3 *ir) { - unsigned ip = 0; + unsigned cnt = 0; list_for_each_entry (struct ir3_block, block, &ir->block_list, node) { list_for_each_entry (struct ir3_instruction, instr, &block->instr_list, node) { - instr->ip = ip++; + instr->ip = cnt++; } block->start_ip = list_first_entry(&block->instr_list, struct ir3_instruction, node)->ip; block->end_ip = list_last_entry(&block->instr_list, struct ir3_instruction, node)->ip; } + return cnt; } |