Mesa (main): ir3: Fix RA debug printing

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Aug 20 10:57:11 UTC 2021


Module: Mesa
Branch: main
Commit: dd4e2f507a486b545e2beaf98d6ae39ef5a2ba5a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd4e2f507a486b545e2beaf98d6ae39ef5a2ba5a

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Tue Aug 17 17:58:15 2021 +0200

ir3: Fix RA debug printing

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12033>

---

 src/freedreno/ir3/ir3.h            |  3 ++
 src/freedreno/ir3/ir3_merge_regs.c | 10 +++---
 src/freedreno/ir3/ir3_print.c      |  6 ++++
 src/freedreno/ir3/ir3_ra.c         | 65 +++++++++++++++++++-------------------
 src/freedreno/ir3/ir3_ra.h         | 11 ++++---
 src/freedreno/ir3/ir3_spill.c      |  5 +--
 6 files changed, 55 insertions(+), 45 deletions(-)

diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h
index 0512d8b5b3d..187f8e13d3e 100644
--- a/src/freedreno/ir3/ir3.h
+++ b/src/freedreno/ir3/ir3.h
@@ -1586,6 +1586,9 @@ void ir3_validate(struct ir3 *ir);
 void ir3_print(struct ir3 *ir);
 void ir3_print_instr(struct ir3_instruction *instr);
 
+struct log_stream;
+void ir3_print_instr_stream(struct log_stream *stream, struct ir3_instruction *instr);
+
 /* delay calculation: */
 int ir3_delayslots(struct ir3_instruction *assigner,
                    struct ir3_instruction *consumer, unsigned n, bool soft);
diff --git a/src/freedreno/ir3/ir3_merge_regs.c b/src/freedreno/ir3/ir3_merge_regs.c
index 4231cbfc571..bb88dbe8fc7 100644
--- a/src/freedreno/ir3/ir3_merge_regs.c
+++ b/src/freedreno/ir3/ir3_merge_regs.c
@@ -498,7 +498,7 @@ index_merge_sets(struct ir3 *ir)
 static void
 dump_merge_sets(struct ir3 *ir)
 {
-   printf("merge sets:\n");
+   d("merge sets:");
    struct set *merge_sets = _mesa_pointer_set_create(NULL);
    foreach_block (block, &ir->block_list) {
       foreach_instr (instr, &block->instr_list) {
@@ -509,12 +509,12 @@ dump_merge_sets(struct ir3 *ir)
             if (!merge_set || _mesa_set_search(merge_sets, merge_set))
                continue;
 
-            printf("merge set, size %u, align %u:\n", merge_set->size,
-                   merge_set->alignment);
+            d("merge set, size %u, align %u:", merge_set->size,
+              merge_set->alignment);
             for (unsigned j = 0; j < merge_set->regs_count; j++) {
                struct ir3_register *reg = merge_set->regs[j];
-               printf("\t" SYN_SSA("ssa_%u") ":%u, offset %u\n",
-                      reg->instr->serialno, reg->name, reg->merge_set_offset);
+               d("\t" SYN_SSA("ssa_%u") ":%u, offset %u",
+                 reg->instr->serialno, reg->name, reg->merge_set_offset);
             }
 
             _mesa_set_add(merge_sets, merge_set);
diff --git a/src/freedreno/ir3/ir3_print.c b/src/freedreno/ir3/ir3_print.c
index 9ab4486c439..c89ede172ff 100644
--- a/src/freedreno/ir3/ir3_print.c
+++ b/src/freedreno/ir3/ir3_print.c
@@ -422,6 +422,12 @@ print_instr(struct log_stream *stream, struct ir3_instruction *instr, int lvl)
    mesa_log_stream_printf(stream, "\n");
 }
 
+void
+ir3_print_instr_stream(struct log_stream *stream, struct ir3_instruction *instr)
+{
+   print_instr(stream, instr, 0);
+}
+
 void
 ir3_print_instr(struct ir3_instruction *instr)
 {
diff --git a/src/freedreno/ir3/ir3_ra.c b/src/freedreno/ir3/ir3_ra.c
index 242e4c4fdf1..cc0bad2f461 100644
--- a/src/freedreno/ir3/ir3_ra.c
+++ b/src/freedreno/ir3/ir3_ra.c
@@ -253,26 +253,28 @@ ir3_reg_interval_remove_temp(struct ir3_reg_ctx *ctx,
 }
 
 static void
-interval_dump(struct ir3_reg_interval *interval, unsigned indent)
+interval_dump(struct log_stream *stream, struct ir3_reg_interval *interval,
+              unsigned indent)
 {
    for (unsigned i = 0; i < indent; i++)
-      printf("\t");
-   printf("reg %u start %u\n", interval->reg->name,
-          interval->reg->interval_start);
+      mesa_log_stream_printf(stream, "\t");
+   mesa_log_stream_printf(stream, "reg %u start %u\n", interval->reg->name,
+                          interval->reg->interval_start);
 
    rb_tree_foreach (struct ir3_reg_interval, child, &interval->children, node) {
-      interval_dump(child, indent + 1);
+      interval_dump(stream, child, indent + 1);
    }
 
    for (unsigned i = 0; i < indent; i++)
-      printf("\t");
-   printf("reg %u end %u\n", interval->reg->name, interval->reg->interval_end);
+      mesa_log_stream_printf(stream, "\t");
+   mesa_log_stream_printf(stream, "reg %u end %u\n", interval->reg->name,
+                          interval->reg->interval_end);
 }
 
 void
-ir3_reg_interval_dump(struct ir3_reg_interval *interval)
+ir3_reg_interval_dump(struct log_stream *stream, struct ir3_reg_interval *interval)
 {
-   interval_dump(interval, 0);
+   interval_dump(stream, interval, 0);
 }
 
 /* These are the core datastructures used by the register allocator. First
@@ -616,45 +618,47 @@ ra_interval_init(struct ra_interval *interval, struct ir3_register *reg)
 }
 
 static void
-ra_interval_dump(struct ra_interval *interval)
+ra_interval_dump(struct log_stream *stream, struct ra_interval *interval)
 {
-   printf("physreg %u ", interval->physreg_start);
+   mesa_log_stream_printf(stream, "physreg %u ", interval->physreg_start);
 
-   ir3_reg_interval_dump(&interval->interval);
+   ir3_reg_interval_dump(stream, &interval->interval);
 }
 
 static void
-ra_file_dump(struct ra_file *file)
+ra_file_dump(struct log_stream *stream, struct ra_file *file)
 {
    rb_tree_foreach (struct ra_interval, interval, &file->physreg_intervals,
                     physreg_node) {
-      ra_interval_dump(interval);
+      ra_interval_dump(stream, interval);
    }
 
    unsigned start, end;
-   printf("available:\n");
+   mesa_log_stream_printf(stream, "available:\n");
    BITSET_FOREACH_RANGE (start, end, file->available, file->size) {
-      printf("%u-%u ", start, end);
+      mesa_log_stream_printf(stream, "%u-%u ", start, end);
    }
-   printf("\n");
+   mesa_log_stream_printf(stream, "\n");
 
-   printf("available to evict:\n");
+   mesa_log_stream_printf(stream, "available to evict:\n");
    BITSET_FOREACH_RANGE (start, end, file->available_to_evict, file->size) {
-      printf("%u-%u ", start, end);
+      mesa_log_stream_printf(stream, "%u-%u ", start, end);
    }
-   printf("\n");
-   printf("start: %u\n", file->start);
+   mesa_log_stream_printf(stream, "\n");
+   mesa_log_stream_printf(stream, "start: %u\n", file->start);
 }
 
 static void
 ra_ctx_dump(struct ra_ctx *ctx)
 {
-   printf("full:\n");
-   ra_file_dump(&ctx->full);
-   printf("half:\n");
-   ra_file_dump(&ctx->half);
-   printf("shared:\n");
-   ra_file_dump(&ctx->shared);
+   struct log_stream *stream = mesa_log_streami();
+   mesa_log_stream_printf(stream, "full:\n");
+   ra_file_dump(stream, &ctx->full);
+   mesa_log_stream_printf(stream, "half:\n");
+   ra_file_dump(stream, &ctx->half);
+   mesa_log_stream_printf(stream, "shared:");
+   ra_file_dump(stream, &ctx->shared);
+   mesa_log_stream_destroy(stream);
 }
 
 static unsigned
@@ -1923,7 +1927,7 @@ handle_block(struct ra_ctx *ctx, struct ir3_block *block)
    insert_live_in_moves(ctx);
 
    if (RA_DEBUG) {
-      printf("after live-in block %u:\n", block->index);
+      d("after live-in block %u:\n", block->index);
       ra_ctx_dump(ctx);
    }
 
@@ -1931,10 +1935,7 @@ handle_block(struct ra_ctx *ctx, struct ir3_block *block)
     * block.
     */
    foreach_instr (instr, &block->instr_list) {
-      if (RA_DEBUG) {
-         printf("processing: ");
-         ir3_print_instr(instr);
-      }
+      di(instr, "processing");
 
       if (instr->opc == OPC_META_PHI)
          assign_phi(ctx, instr);
diff --git a/src/freedreno/ir3/ir3_ra.h b/src/freedreno/ir3/ir3_ra.h
index 2925370c13c..fcef6a908e1 100644
--- a/src/freedreno/ir3/ir3_ra.h
+++ b/src/freedreno/ir3/ir3_ra.h
@@ -36,15 +36,17 @@
 #define d(fmt, ...)                                                            \
    do {                                                                        \
       if (RA_DEBUG) {                                                          \
-         printf("RA: " fmt "\n", ##__VA_ARGS__);                               \
+         mesa_logi("RA: " fmt, ##__VA_ARGS__);                                 \
       }                                                                        \
    } while (0)
 
 #define di(instr, fmt, ...)                                                    \
    do {                                                                        \
       if (RA_DEBUG) {                                                          \
-         printf("RA: " fmt ": ", ##__VA_ARGS__);                               \
-         ir3_print_instr(instr);                                               \
+         struct log_stream *stream = mesa_log_streami();                       \
+         mesa_log_stream_printf(stream, "RA: " fmt ": ", ##__VA_ARGS__);       \
+         ir3_print_instr_stream(stream, instr);                                \
+         mesa_log_stream_destroy(stream);                                      \
       }                                                                        \
    } while (0)
 
@@ -257,7 +259,8 @@ ir3_reg_interval_init(struct ir3_reg_interval *interval,
    interval->inserted = false;
 }
 
-void ir3_reg_interval_dump(struct ir3_reg_interval *interval);
+void ir3_reg_interval_dump(struct log_stream *stream,
+                           struct ir3_reg_interval *interval);
 
 void ir3_reg_interval_insert(struct ir3_reg_ctx *ctx,
                              struct ir3_reg_interval *interval);
diff --git a/src/freedreno/ir3/ir3_spill.c b/src/freedreno/ir3/ir3_spill.c
index 2b7ff356ffc..54ae56b1beb 100644
--- a/src/freedreno/ir3/ir3_spill.c
+++ b/src/freedreno/ir3/ir3_spill.c
@@ -240,10 +240,7 @@ update_max_pressure(struct ra_spill_ctx *ctx)
 static void
 handle_instr(struct ra_spill_ctx *ctx, struct ir3_instruction *instr)
 {
-   if (RA_DEBUG) {
-      printf("processing: ");
-      ir3_print_instr(instr);
-   }
+   di(instr, "processing");
 
    ra_foreach_dst (dst, instr) {
       init_dst(ctx, dst);



More information about the mesa-commit mailing list