summaryrefslogtreecommitdiffstats
path: root/src/freedreno
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2019-11-22 11:13:19 -0800
committerRob Clark <[email protected]>2019-12-13 09:25:40 -0800
commitad92aa36acd6a30cc75ac9cdf8ade07f5429ac74 (patch)
tree65eb81cc04c2c7d82eb084652c370b8da8969a15 /src/freedreno
parentdd34ccb2c5abff27bddb32becfa8fea6c4abaf1b (diff)
freedreno/ir3: add scheduler traces
Add some infrastructure to trace scheduler decisions. The next patch will add some more traces, just splitting this out to reduce clutter. Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/freedreno')
-rw-r--r--src/freedreno/ir3/ir3_compiler.c3
-rw-r--r--src/freedreno/ir3/ir3_compiler.h1
-rw-r--r--src/freedreno/ir3/ir3_print.c1
-rw-r--r--src/freedreno/ir3/ir3_sched.c19
4 files changed, 24 insertions, 0 deletions
diff --git a/src/freedreno/ir3/ir3_compiler.c b/src/freedreno/ir3/ir3_compiler.c
index fc81246c5ab..d21f33e5bc5 100644
--- a/src/freedreno/ir3/ir3_compiler.c
+++ b/src/freedreno/ir3/ir3_compiler.c
@@ -39,6 +39,9 @@ static const struct debug_named_value shader_debug_options[] = {
{"optmsgs", IR3_DBG_OPTMSGS, "Enable optimizer debug messages"},
{"forces2en", IR3_DBG_FORCES2EN, "Force s2en mode for tex sampler instructions"},
{"nouboopt", IR3_DBG_NOUBOOPT, "Disable lowering UBO to uniform"},
+#ifdef DEBUG
+ {"schedmsgs", IR3_DBG_SCHEDMSGS, "Enable scheduler debug messages"},
+#endif
DEBUG_NAMED_VALUE_END
};
diff --git a/src/freedreno/ir3/ir3_compiler.h b/src/freedreno/ir3/ir3_compiler.h
index b5e4c3e9c61..c5213a65b08 100644
--- a/src/freedreno/ir3/ir3_compiler.h
+++ b/src/freedreno/ir3/ir3_compiler.h
@@ -92,6 +92,7 @@ enum ir3_shader_debug {
IR3_DBG_OPTMSGS = 0x080,
IR3_DBG_FORCES2EN = 0x100,
IR3_DBG_NOUBOOPT = 0x200,
+ IR3_DBG_SCHEDMSGS = 0x400,
};
extern enum ir3_shader_debug ir3_shader_debug;
diff --git a/src/freedreno/ir3/ir3_print.c b/src/freedreno/ir3/ir3_print.c
index f760f57e1a8..db4cc98df90 100644
--- a/src/freedreno/ir3/ir3_print.c
+++ b/src/freedreno/ir3/ir3_print.c
@@ -73,6 +73,7 @@ static void print_instr_name(struct ir3_instruction *instr, bool flags)
printf("%04u:", instr->name);
printf("%04u:", instr->ip);
printf("%03d:", instr->depth);
+ printf("%03u: ", instr->use_count);
if (flags) {
printf("\t");
diff --git a/src/freedreno/ir3/ir3_sched.c b/src/freedreno/ir3/ir3_sched.c
index 247221d3a03..0756eaf5140 100644
--- a/src/freedreno/ir3/ir3_sched.c
+++ b/src/freedreno/ir3/ir3_sched.c
@@ -28,6 +28,21 @@
#include "util/u_math.h"
#include "ir3.h"
+#include "ir3_compiler.h"
+
+#ifdef DEBUG
+#define SCHED_DEBUG (ir3_shader_debug & IR3_DBG_SCHEDMSGS)
+#else
+#define SCHED_DEBUG 0
+#endif
+#define d(fmt, ...) do { if (SCHED_DEBUG) { \
+ printf("SCHED: "fmt"\n", ##__VA_ARGS__); \
+} } while (0)
+
+#define di(instr, fmt, ...) do { if (SCHED_DEBUG) { \
+ printf("SCHED: "fmt": ", ##__VA_ARGS__); \
+ ir3_print_instr(instr); \
+} } while (0)
/*
* Instruction Scheduling:
@@ -214,6 +229,8 @@ schedule(struct ir3_sched_ctx *ctx, struct ir3_instruction *instr)
instr->flags |= IR3_INSTR_MARK;
+ di(instr, "schedule");
+
list_addtail(&instr->node, &instr->block->instr_list);
ctx->scheduled = instr;
@@ -812,6 +829,8 @@ sched_block(struct ir3_sched_ctx *ctx, struct ir3_block *block)
if (instr) {
unsigned delay = delay_calc(ctx->block, instr, false, false);
+ d("delay=%u", delay);
+
/* and if we run out of instructions that can be scheduled,
* then it is time for nop's:
*/