aboutsummaryrefslogtreecommitdiffstats
path: root/src/freedreno/ir3/ir3_depth.c
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2019-12-18 11:10:12 -0800
committerMarge Bot <[email protected]>2020-02-01 02:40:22 +0000
commitc803c662f990621acefd2f002d9df0d42ad8a3a0 (patch)
tree60c02c6727013ad09890a4ff73363584e8222701 /src/freedreno/ir3/ir3_depth.c
parent54c795f8297d5087b013777bddac32ed47941cb7 (diff)
freedreno/ir3: split out delay helpers
We're going to want these also for a post-RA sched pass. And also to split nop stuffing out into it's own pass. Signed-off-by: Rob Clark <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3569>
Diffstat (limited to 'src/freedreno/ir3/ir3_depth.c')
-rw-r--r--src/freedreno/ir3/ir3_depth.c66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/freedreno/ir3/ir3_depth.c b/src/freedreno/ir3/ir3_depth.c
index f1f7b94b2fc..59ea3af407b 100644
--- a/src/freedreno/ir3/ir3_depth.c
+++ b/src/freedreno/ir3/ir3_depth.c
@@ -48,72 +48,6 @@
* blocks depth sorted list, which is used by the scheduling pass.
*/
-/* generally don't count false dependencies, since this can just be
- * something like a barrier, or SSBO store. The exception is array
- * dependencies if the assigner is an array write and the consumer
- * reads the same array.
- */
-static bool
-ignore_dep(struct ir3_instruction *assigner,
- struct ir3_instruction *consumer, unsigned n)
-{
- if (!__is_false_dep(consumer, n))
- return false;
-
- if (assigner->barrier_class & IR3_BARRIER_ARRAY_W) {
- struct ir3_register *dst = assigner->regs[0];
- struct ir3_register *src;
-
- debug_assert(dst->flags & IR3_REG_ARRAY);
-
- foreach_src(src, consumer) {
- if ((src->flags & IR3_REG_ARRAY) &&
- (dst->array.id == src->array.id)) {
- return false;
- }
- }
- }
-
- return true;
-}
-
-/* calculate required # of delay slots between the instruction that
- * assigns a value and the one that consumes
- */
-int ir3_delayslots(struct ir3_instruction *assigner,
- struct ir3_instruction *consumer, unsigned n)
-{
- if (ignore_dep(assigner, consumer, n))
- return 0;
-
- /* worst case is cat1-3 (alu) -> cat4/5 needing 6 cycles, normal
- * alu -> alu needs 3 cycles, cat4 -> alu and texture fetch
- * handled with sync bits
- */
-
- if (is_meta(assigner) || is_meta(consumer))
- return 0;
-
- if (writes_addr(assigner))
- return 6;
-
- /* handled via sync flags: */
- if (is_sfu(assigner) || is_tex(assigner) || is_mem(assigner))
- return 0;
-
- /* assigner must be alu: */
- if (is_flow(consumer) || is_sfu(consumer) || is_tex(consumer) ||
- is_mem(consumer)) {
- return 6;
- } else if ((is_mad(consumer->opc) || is_madsh(consumer->opc)) &&
- (n == 3)) {
- /* special case, 3rd src to cat3 not required on first cycle */
- return 1;
- } else {
- return 3;
- }
-}
-
void
ir3_insert_by_depth(struct ir3_instruction *instr, struct list_head *list)
{