diff options
author | Rob Clark <[email protected]> | 2020-04-03 09:04:10 -0700 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-04-13 20:47:28 +0000 |
commit | 89a78a07dec8f6fab7a80bba951b134a42bb9a2c (patch) | |
tree | c2b8f3b2a157721bec70dde05c6edf903cfc6ec5 /src/freedreno/ir3/ir3_postsched.c | |
parent | 017fdab2172c845eb7dd6e11d2a5c13245374247 (diff) |
freedreno/ir3/postsched: avoid moving tex ahead of kill
Add extra dependencies of tex/mem instructions on previous kill
instructions to avoid moving them ahead of kills.
Signed-off-by: Rob Clark <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4440>
Diffstat (limited to 'src/freedreno/ir3/ir3_postsched.c')
-rw-r--r-- | src/freedreno/ir3/ir3_postsched.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/freedreno/ir3/ir3_postsched.c b/src/freedreno/ir3/ir3_postsched.c index 3dc4505c52d..09e58750c04 100644 --- a/src/freedreno/ir3/ir3_postsched.c +++ b/src/freedreno/ir3/ir3_postsched.c @@ -507,6 +507,14 @@ sched_dag_init(struct ir3_postsched_ctx *ctx) calculate_reverse_deps(ctx); /* + * To avoid expensive texture fetches, etc, from being moved ahead + * of kills, track the kills we've seen so far, so we can add an + * extra dependency on them for tex/mem instructions + */ + struct util_dynarray kills; + util_dynarray_init(&kills, ctx->mem_ctx); + + /* * Normal srcs won't be in SSA at this point, those are dealt with in * calculate_forward_deps() and calculate_reverse_deps(). But we still * have the false-dep information in SSA form, so go ahead and add @@ -532,6 +540,16 @@ sched_dag_init(struct ir3_postsched_ctx *ctx) dag_add_edge(&sn->dag, &n->dag, NULL); } + + if (is_kill(instr)) { + util_dynarray_append(&kills, struct ir3_instruction *, instr); + } else if (is_tex(instr) || is_mem(instr)) { + util_dynarray_foreach(&kills, struct ir3_instruction *, instrp) { + struct ir3_instruction *kill = *instrp; + struct ir3_postsched_node *kn = kill->data; + dag_add_edge(&kn->dag, &n->dag, NULL); + } + } } // TODO do we want to do this after reverse-dependencies? |