diff options
author | Alyssa Rosenzweig <[email protected]> | 2019-07-23 20:01:44 -0700 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2019-07-25 06:37:21 -0700 |
commit | 63385a3fdb6a42013be74091d0264a09550766ee (patch) | |
tree | 57940578b7fe3d826bb2c0cd27bc79c6bdcb728f /src/panfrost | |
parent | 5534fdb7bf6d7d377318724fbe480ead1e0962c3 (diff) |
pan/midgard: Add mir_single_use helper
Helps as an optimization heuristic.
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src/panfrost')
-rw-r--r-- | src/panfrost/midgard/compiler.h | 1 | ||||
-rw-r--r-- | src/panfrost/midgard/mir.c | 21 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h index 2d5f07451a5..50e1846f893 100644 --- a/src/panfrost/midgard/compiler.h +++ b/src/panfrost/midgard/compiler.h @@ -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 */ diff --git a/src/panfrost/midgard/mir.c b/src/panfrost/midgard/mir.c index c606cb3ddf7..ea7c65110b4 100644 --- a/src/panfrost/midgard/mir.c +++ b/src/panfrost/midgard/mir.c @@ -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; + +} |