pan/midgard: Add mir_single_use helper
Helps as an optimization heuristic. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
@@ -373,6 +373,7 @@ void mir_rewrite_index(compiler_context *ctx, unsigned old, unsigned new);
|
||||
void mir_rewrite_index_src(compiler_context *ctx, unsigned old, unsigned new);
|
||||
void mir_rewrite_index_dst(compiler_context *ctx, unsigned old, unsigned new);
|
||||
void mir_rewrite_index_src_single(midgard_instruction *ins, unsigned old, unsigned new);
|
||||
bool mir_single_use(compiler_context *ctx, unsigned value);
|
||||
|
||||
/* MIR printing */
|
||||
|
||||
|
||||
@@ -57,3 +57,24 @@ mir_rewrite_index(compiler_context *ctx, unsigned old, unsigned new)
|
||||
mir_rewrite_index_src(ctx, old, new);
|
||||
mir_rewrite_index_dst(ctx, old, new);
|
||||
}
|
||||
|
||||
/* Checks if a value is used only once (or totally dead), which is an important
|
||||
* heuristic to figure out if certain optimizations are Worth It (TM) */
|
||||
|
||||
bool
|
||||
mir_single_use(compiler_context *ctx, unsigned value)
|
||||
{
|
||||
unsigned used_count = 0;
|
||||
|
||||
mir_foreach_instr_global(ctx, ins) {
|
||||
if (mir_has_arg(ins, value))
|
||||
++used_count;
|
||||
|
||||
/* Short circuit for speed */
|
||||
if (used_count > 1)
|
||||
return false;
|
||||
}
|
||||
|
||||
return used_count <= 1;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user