Mesa (master): freedreno/ir3: rename depth->dce
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Apr 13 21:06:29 UTC 2020
Module: Mesa
Branch: master
Commit: 751c11a8c7a6f54f87c62e4b49802bf80826ec42
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=751c11a8c7a6f54f87c62e4b49802bf80826ec42
Author: Rob Clark <robdclark at chromium.org>
Date: Sat Apr 4 10:29:53 2020 -0700
freedreno/ir3: rename depth->dce
Since DCE is the only remaining function of this pass, after the pre-RA
scheduler rewrite.
Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4440>
---
src/freedreno/Makefile.sources | 2 +-
src/freedreno/ir3/ir3.c | 1 -
src/freedreno/ir3/ir3.h | 26 +++------------
src/freedreno/ir3/ir3_compiler_nir.c | 4 +--
src/freedreno/ir3/{ir3_depth.c => ir3_dce.c} | 50 +++++-----------------------
src/freedreno/ir3/ir3_print.c | 1 -
src/freedreno/ir3/meson.build | 2 +-
7 files changed, 18 insertions(+), 68 deletions(-)
diff --git a/src/freedreno/Makefile.sources b/src/freedreno/Makefile.sources
index 07a59c97764..045d94ec6b7 100644
--- a/src/freedreno/Makefile.sources
+++ b/src/freedreno/Makefile.sources
@@ -29,7 +29,7 @@ ir3_SOURCES := \
ir3/ir3_context.h \
ir3/ir3_cp.c \
ir3/ir3_cf.c \
- ir3/ir3_depth.c \
+ ir3/ir3_dce.c \
ir3/ir3_delay.c \
ir3/ir3_group.c \
ir3/ir3_image.c \
diff --git a/src/freedreno/ir3/ir3.c b/src/freedreno/ir3/ir3.c
index f2dbc88f3bb..dcd5a5082a6 100644
--- a/src/freedreno/ir3/ir3.c
+++ b/src/freedreno/ir3/ir3.c
@@ -1149,7 +1149,6 @@ ir3_clear_mark(struct ir3 *ir)
}
}
-/* note: this will destroy instr->depth, don't do it until after sched! */
unsigned
ir3_count_instructions(struct ir3 *ir)
{
diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h
index 7fb0d823d25..b58cd6eb4be 100644
--- a/src/freedreno/ir3/ir3.h
+++ b/src/freedreno/ir3/ir3.h
@@ -306,25 +306,9 @@ struct ir3_instruction {
} input;
};
- /* transient values used during various algorithms: */
- union {
- /* The instruction depth is the max dependency distance to output.
- *
- * You can also think of it as the "cost", if we did any sort of
- * optimization for register footprint. Ie. a value that is just
- * result of moving a const to a reg would have a low cost, so to
- * it could make sense to duplicate the instruction at various
- * points where the result is needed to reduce register footprint.
- */
- int depth;
- /* When we get to the RA stage, we no longer need depth, but
- * we do need instruction's position/name:
- */
- struct {
- uint16_t ip;
- uint16_t name;
- };
- };
+ /* When we get to the RA stage, we need instruction's position/name: */
+ uint16_t ip;
+ uint16_t name;
/* used for per-pass extra instruction data.
*
@@ -1199,9 +1183,9 @@ unsigned ir3_delay_calc(struct ir3_block *block, struct ir3_instruction *instr,
bool soft, bool pred);
void ir3_remove_nops(struct ir3 *ir);
-/* depth calculation: */
+/* dead code elimination: */
struct ir3_shader_variant;
-void ir3_depth(struct ir3 *ir, struct ir3_shader_variant *so);
+void ir3_dce(struct ir3 *ir, struct ir3_shader_variant *so);
/* fp16 conversion folding */
void ir3_cf(struct ir3 *ir);
diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index 752adc8f1b7..365870509b3 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -3640,9 +3640,9 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
ir3_debug_print(ir, "AFTER GROUPING");
- ir3_depth(ir, so);
+ ir3_dce(ir, so);
- ir3_debug_print(ir, "AFTER DEPTH");
+ ir3_debug_print(ir, "AFTER DCE");
/* do Sethi–Ullman numbering before scheduling: */
ir3_sun(ir);
diff --git a/src/freedreno/ir3/ir3_depth.c b/src/freedreno/ir3/ir3_dce.c
similarity index 78%
rename from src/freedreno/ir3/ir3_depth.c
rename to src/freedreno/ir3/ir3_dce.c
index 90a0ddef51f..0bd8af537f4 100644
--- a/src/freedreno/ir3/ir3_depth.c
+++ b/src/freedreno/ir3/ir3_dce.c
@@ -30,26 +30,11 @@
#include "ir3_shader.h"
/*
- * Instruction Depth:
- *
- * Calculates weighted instruction depth, ie. the sum of # of needed
- * instructions plus delay slots back to original input (ie INPUT or
- * CONST). That is to say, an instructions depth is:
- *
- * depth(instr) {
- * d = 0;
- * // for each src register:
- * foreach (src in instr->regs[1..n])
- * d = max(d, delayslots(src->instr, n) + depth(src->instr));
- * return d + 1;
- * }
- *
- * After an instruction's depth is calculated, it is inserted into the
- * blocks depth sorted list, which is used by the scheduling pass.
+ * Dead code elimination:
*/
static void
-ir3_instr_depth(struct ir3_instruction *instr, unsigned boost, bool falsedep)
+instr_dce(struct ir3_instruction *instr, bool falsedep)
{
struct ir3_instruction *src;
@@ -60,26 +45,9 @@ ir3_instr_depth(struct ir3_instruction *instr, unsigned boost, bool falsedep)
if (ir3_instr_check_mark(instr))
return;
- instr->depth = 0;
-
foreach_ssa_src_n (src, i, instr) {
- unsigned sd;
-
- /* visit child to compute it's depth: */
- ir3_instr_depth(src, boost, __is_false_dep(instr, i));
-
- /* for array writes, no need to delay on previous write: */
- if (i == 0)
- continue;
-
- sd = ir3_delayslots(src, instr, i, true) + src->depth;
- sd += boost;
-
- instr->depth = MAX2(instr->depth, sd);
+ instr_dce(src, __is_false_dep(instr, i));
}
-
- if (!is_meta(instr))
- instr->depth++;
}
static bool
@@ -129,7 +97,7 @@ remove_unused_by_block(struct ir3_block *block)
}
static bool
-compute_depth_and_remove_unused(struct ir3 *ir, struct ir3_shader_variant *so)
+find_and_remove_unused(struct ir3 *ir, struct ir3_shader_variant *so)
{
unsigned i;
bool progress = false;
@@ -154,15 +122,15 @@ compute_depth_and_remove_unused(struct ir3 *ir, struct ir3_shader_variant *so)
struct ir3_instruction *out;
foreach_output (out, ir)
- ir3_instr_depth(out, 0, false);
+ instr_dce(out, false);
foreach_block (block, &ir->block_list) {
for (i = 0; i < block->keeps_count; i++)
- ir3_instr_depth(block->keeps[i], 0, false);
+ instr_dce(block->keeps[i], false);
/* We also need to account for if-condition: */
if (block->condition)
- ir3_instr_depth(block->condition, 6, false);
+ instr_dce(block->condition, false);
}
/* remove un-used instructions: */
@@ -211,7 +179,7 @@ compute_depth_and_remove_unused(struct ir3 *ir, struct ir3_shader_variant *so)
}
void
-ir3_depth(struct ir3 *ir, struct ir3_shader_variant *so)
+ir3_dce(struct ir3 *ir, struct ir3_shader_variant *so)
{
void *mem_ctx = ralloc_context(NULL);
bool progress;
@@ -219,7 +187,7 @@ ir3_depth(struct ir3 *ir, struct ir3_shader_variant *so)
ir3_find_ssa_uses(ir, mem_ctx, true);
do {
- progress = compute_depth_and_remove_unused(ir, so);
+ progress = find_and_remove_unused(ir, so);
} while (progress);
ralloc_free(mem_ctx);
diff --git a/src/freedreno/ir3/ir3_print.c b/src/freedreno/ir3/ir3_print.c
index b18a3d27e34..753a9919ca0 100644
--- a/src/freedreno/ir3/ir3_print.c
+++ b/src/freedreno/ir3/ir3_print.c
@@ -72,7 +72,6 @@ static void print_instr_name(struct ir3_instruction *instr, bool flags)
#endif
printf("%04u:", instr->name);
printf("%04u:", instr->ip);
- printf("%03d:", instr->depth);
if (instr->flags & IR3_INSTR_UNUSED) {
printf("XXX: ");
} else {
diff --git a/src/freedreno/ir3/meson.build b/src/freedreno/ir3/meson.build
index 69103341158..068d4262ee7 100644
--- a/src/freedreno/ir3/meson.build
+++ b/src/freedreno/ir3/meson.build
@@ -55,8 +55,8 @@ libfreedreno_ir3_files = files(
'ir3_context.h',
'ir3_cf.c',
'ir3_cp.c',
+ 'ir3_dce.c',
'ir3_delay.c',
- 'ir3_depth.c',
'ir3_group.c',
'ir3_image.c',
'ir3_image.h',
More information about the mesa-commit
mailing list