mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 03:10:09 +01:00
freedreno/ir3/group: report progress
Not iterative, but this will let IR3_PASS() macro know if there are any changes to print. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5048>
This commit is contained in:
parent
721147a05d
commit
c3630c9d29
2 changed files with 19 additions and 11 deletions
|
|
@ -1201,7 +1201,7 @@ bool ir3_cf(struct ir3 *ir);
|
|||
bool ir3_cp(struct ir3 *ir, struct ir3_shader_variant *so);
|
||||
|
||||
/* group neighbors and insert mov's to resolve conflicts: */
|
||||
void ir3_group(struct ir3 *ir);
|
||||
bool ir3_group(struct ir3 *ir);
|
||||
|
||||
/* scheduling: */
|
||||
bool ir3_sched_add_deps(struct ir3 *ir);
|
||||
|
|
|
|||
|
|
@ -139,45 +139,53 @@ restart:
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static bool
|
||||
instr_find_neighbors(struct ir3_instruction *instr)
|
||||
{
|
||||
struct ir3_instruction *src;
|
||||
bool progress = false;
|
||||
|
||||
if (ir3_instr_check_mark(instr))
|
||||
return;
|
||||
return false;
|
||||
|
||||
if (instr->opc == OPC_META_COLLECT)
|
||||
if (instr->opc == OPC_META_COLLECT) {
|
||||
group_collect(instr);
|
||||
progress = true;
|
||||
}
|
||||
|
||||
foreach_ssa_src (src, instr)
|
||||
instr_find_neighbors(src);
|
||||
progress |= instr_find_neighbors(src);
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
||||
static void
|
||||
static bool
|
||||
find_neighbors(struct ir3 *ir)
|
||||
{
|
||||
bool progress = false;
|
||||
unsigned i;
|
||||
|
||||
struct ir3_instruction *out;
|
||||
foreach_output (out, ir)
|
||||
instr_find_neighbors(out);
|
||||
progress |= instr_find_neighbors(out);
|
||||
|
||||
foreach_block (block, &ir->block_list) {
|
||||
for (i = 0; i < block->keeps_count; i++) {
|
||||
struct ir3_instruction *instr = block->keeps[i];
|
||||
instr_find_neighbors(instr);
|
||||
progress |= instr_find_neighbors(instr);
|
||||
}
|
||||
|
||||
/* We also need to account for if-condition: */
|
||||
if (block->condition)
|
||||
instr_find_neighbors(block->condition);
|
||||
progress |= instr_find_neighbors(block->condition);
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
ir3_group(struct ir3 *ir)
|
||||
{
|
||||
ir3_clear_mark(ir);
|
||||
find_neighbors(ir);
|
||||
return find_neighbors(ir);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue