nv50: turn off verbose debug output by default
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Tue, 31 Aug 2010 11:17:07 +0000 (13:17 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Wed, 1 Sep 2010 16:02:50 +0000 (18:02 +0200)
src/gallium/drivers/nv50/nv50_pc.c
src/gallium/drivers/nv50/nv50_pc.h
src/gallium/drivers/nv50/nv50_pc_emit.c
src/gallium/drivers/nv50/nv50_pc_optimize.c
src/gallium/drivers/nv50/nv50_pc_regalloc.c
src/gallium/drivers/nv50/nv50_program.c
src/gallium/drivers/nv50/nv50_tgsi_to_nc.c

index b9d274414d15e336866706e5c162f474d3f41828..1c12fe1b9e7c69c4561faf391f9f2390d8a25f46 100644 (file)
@@ -20,6 +20,8 @@
  * SOFTWARE.
  */
 
+/* #define NV50PC_DEBUG */
+
 #include "nv50_pc.h"
 #include "nv50_program.h"
 
@@ -311,7 +313,7 @@ nv50_emit_program(struct nv_pc *pc)
    uint32_t *code = pc->emit;
    int n;
 
-   debug_printf("emitting program: size = %u\n", pc->bin_size);
+   NV50_DBGMSG("emitting program: size = %u\n", pc->bin_size);
 
    for (n = 0; n < pc->num_blocks; ++n) {
       struct nv_instruction *i;
@@ -336,7 +338,9 @@ nv50_emit_program(struct nv_pc *pc)
    pc->emit = code;
    code[pc->bin_size / 4 - 1] |= 1;
 
+#ifdef NV50PC_DEBUG
    nvcg_show_bincode(pc);
+#endif
 
    return 0;
 }
@@ -354,7 +358,9 @@ nv50_generate_code(struct nv50_translation_info *ti)
    ret = nv50_tgsi_to_nc(pc, ti);
    if (ret)
       goto out;
+#ifdef NV50PC_DEBUG
    nv_print_program(pc->root);
+#endif
 
    /* optimization */
    ret = nv_pc_exec_pass0(pc);
@@ -392,7 +398,7 @@ nv50_generate_code(struct nv50_translation_info *ti)
    ti->p->fixups = pc->fixups;
    ti->p->num_fixups = pc->num_fixups;
 
-   debug_printf("SHADER TRANSLATION - %s\n", ret ? "failure" : "success");
+   NV50_DBGMSG("SHADER TRANSLATION - %s\n", ret ? "failure" : "success");
 
 out:
    nv_pc_free_refs(pc);
@@ -492,7 +498,7 @@ nv_nvi_delete(struct nv_instruction *nvi)
 
    if (nvi == b->phi) {
       if (nvi->opcode != NV_OP_PHI)
-         debug_printf("NOTE: b->phi points to non-PHI instruction\n");
+         NV50_DBGMSG("NOTE: b->phi points to non-PHI instruction\n");
 
       assert(!nvi->prev);
       if (!nvi->next || nvi->next->opcode != NV_OP_PHI)
index d24375100d853172a385a485e728099e00f3d434..48918f46d5b83e8a68bcd465da4bec5446c94547 100644 (file)
 #ifndef __NV50_COMPILER_H__
 #define __NV50_COMPILER_H__
 
+#ifdef NV50PC_DEBUG
+# define NV50_DBGMSG(args...) debug_printf(args)
+#else
+# define NV50_DBGMSG(args...)
+#endif
+
 #include "pipe/p_defines.h"
 #include "util/u_inlines.h"
 #include "util/u_memory.h"
index bc151c3a80845d17a5b23ad8ce90502ded8a65bd..7808335e50ba04dfe136324567dd869597614648 100644 (file)
@@ -239,8 +239,7 @@ set_dst(struct nv_pc *pc, struct nv_value *value)
    struct nv_reg *reg = &value->join->reg;
 
    if (reg->id < 0) {
-      debug_printf("WARNING: unused dst, hope we can bucket it !\n");
-      pc->emit[0] |= 127 << 2;
+      pc->emit[0] |= (127 << 2) | 1; /* set 'long'-bit to catch bugs */
       pc->emit[1] |= 0x8;
       return;
    }
@@ -249,7 +248,7 @@ set_dst(struct nv_pc *pc, struct nv_value *value)
       pc->emit[1] |= 0x8;
    else
    if (reg->file == NV_FILE_ADDR)
-          assert(0);
+      assert(0);
 
    pc->emit[0] |= reg->id << 2;
 }
@@ -801,8 +800,8 @@ emit_flop(struct nv_pc *pc, struct nv_instruction *i)
 
    pc->emit[0] = 0x90000000;
 
-   assert(SREG(src0)->type == NV_TYPE_F32);
-   assert(SREG(src0)->file == NV_FILE_GPR);
+   assert(STYPE(i, 0) == NV_TYPE_F32);
+   assert(SFILE(i, 0) == NV_FILE_GPR);
 
    if (!i->is_long) {
       emit_form_MUL(pc, i);
@@ -1057,7 +1056,7 @@ emit_ddy(struct nv_pc *pc, struct nv_instruction *i)
 void
 nv50_emit_instruction(struct nv_pc *pc, struct nv_instruction *i)
 {
-   // nv_print_instruction(i);
+   /* nv_print_instruction(i); */
 
    switch (i->opcode) {
    case NV_OP_MOV:
index 80f3bb34b057cd91623bcc2ebc35266b4cb6ca87..4b1cd56fc13671755be6de0ff8c7338331ae8dda 100644 (file)
@@ -20,6 +20,8 @@
  * SOFTWARE.
  */
 
+/* #define NV50PC_DEBUG */
+
 #include "nv50_pc.h"
 
 #define DESCEND_ARBITRARY(j, f)                                 \
@@ -109,7 +111,7 @@ nvi_isnop(struct nv_instruction *nvi)
       return FALSE;
 
    if (nvi->src[0]->value->join->reg.id < 0) {
-      debug_printf("nvi_isnop: orphaned value detected\n");
+      NV50_DBGMSG("nvi_isnop: orphaned value detected\n");
       return TRUE;
    }
 
@@ -176,9 +178,6 @@ nv_pc_pass_pre_emission(void *priv, struct nv_basic_block *b)
           nv50_inst_min_size(nvi->next) == 4 &&
           inst_commutation_legal(nvi, nvi->next)) {
          ++n32;
-         debug_printf("permuting: ");
-         nv_print_instruction(nvi);
-         nv_print_instruction(nvi->next);
          nv_nvi_permute(nvi, nvi->next);
          next = nvi;
       } else {
@@ -193,7 +192,7 @@ nv_pc_pass_pre_emission(void *priv, struct nv_basic_block *b)
    }
 
    if (!b->entry) {
-      debug_printf("block %p is now empty\n", b);
+      NV50_DBGMSG("block %p is now empty\n", b);
    } else
    if (!b->exit->is_long) {
       assert(n32);
@@ -221,7 +220,7 @@ nv_pc_exec_pass2(struct nv_pc *pc)
    pc->pass_seq++;
    nv_pass_flatten(&pass, pc->root);
 
-   debug_printf("preparing %u blocks for emission\n", pc->num_blocks);
+   NV50_DBGMSG("preparing %u blocks for emission\n", pc->num_blocks);
 
    pc->bb_list = CALLOC(pc->num_blocks, sizeof(struct nv_basic_block *));
    pc->num_blocks = 0;
@@ -708,21 +707,6 @@ nv_pass_lower_arith(struct nv_pass *ctx, struct nv_basic_block *b)
    return 0;
 }
 
-/*
-set $r2 g f32 $r2 $r3
-cvt abs rn f32 $r2 s32 $r2
-cvt f32 $c0 # f32 $r2
-e $c0 bra 0x80
-*/
-#if 0
-static int
-nv_pass_lower_cond(struct nv_pass *ctx, struct nv_basic_block *b)
-{
-   /* XXX: easier in IR builder for now */
-   return 0;
-}
-#endif
-
 /* TODO: redundant store elimination */
 
 struct load_record {
@@ -936,7 +920,7 @@ nv_pass_flatten(struct nv_pass *ctx, struct nv_basic_block *b)
 
    if (bb_is_if_else_endif(b)) {
 
-      debug_printf("pass_flatten: IF/ELSE/ENDIF construct at BB:%i\n", b->id);
+      NV50_DBGMSG("pass_flatten: IF/ELSE/ENDIF construct at BB:%i\n", b->id);
 
       for (n0 = 0, nvi = b->out[0]->entry; nvi; nvi = nvi->next, ++n0)
          if (!nv50_nvi_can_predicate(nvi))
@@ -945,11 +929,13 @@ nv_pass_flatten(struct nv_pass *ctx, struct nv_basic_block *b)
          for (n1 = 0, nvi = b->out[1]->entry; nvi; nvi = nvi->next, ++n1)
             if (!nv50_nvi_can_predicate(nvi))
                break;
+#ifdef NV50_PC_DEBUG
          if (nvi) {
             debug_printf("cannot predicate: "); nv_print_instruction(nvi);
          }
       } else {
          debug_printf("cannot predicate: "); nv_print_instruction(nvi);
+#endif
       }
 
       if (!nvi && n0 < 12 && n1 < 12) { /* 12 as arbitrary limit */
index d45dd7f95f5bbe627ecbe6e5de0bf972d4a9c999..59462cc11e67181cf3f9944ed3eefcc41d750a10 100644 (file)
@@ -20,6 +20,8 @@
  * SOFTWARE.
  */
 
+/* #define NV50PC_DEBUG */
+
 #include "nv50_context.h"
 #include "nv50_pc.h"
 
@@ -112,15 +114,8 @@ add_range(struct nv_value *val, struct nv_basic_block *b, int end)
    if (bgn < b->entry->serial || bgn > b->exit->serial)
       bgn = b->entry->serial;
 
-   if (bgn > end) {
-      debug_printf("Aieee! BLOCK [%i, %i], RANGE [%i, %i)\n",
-                   b->entry->serial, b->exit->serial, bgn, end);
-   }
    assert(bgn <= end);
 
-   if (bgn < val->insn->serial)
-      debug_printf("WARNING: leaking value %i ?\n", val->n);
-
    add_range_ex(val, bgn, end, NULL);
 }
 
@@ -559,12 +554,8 @@ pass_build_live_sets(struct nv_pc_pass *ctx, struct nv_basic_block *b)
    struct nv_instruction *i;
    int j, n, ret = 0;
 
-   debug_printf("pass_build_live_sets BB:%i\n", b->id);
-
-   if (b->pass_seq >= ctx->pc->pass_seq) {
-      debug_printf("already visited\n");
+   if (b->pass_seq >= ctx->pc->pass_seq)
       return 0;
-   }
    b->pass_seq = ctx->pc->pass_seq;
 
    /* slight hack for undecidedness: set phi = entry if it's undefined */
@@ -595,13 +586,10 @@ pass_build_live_sets(struct nv_pc_pass *ctx, struct nv_basic_block *b)
                break;
             assert(i->src[j]->value->insn);
 
-            if (nvbb_reachable_by(b, i->src[j]->value->insn->bb, b->out[n])) {
+            if (nvbb_reachable_by(b, i->src[j]->value->insn->bb, b->out[n]))
                live_set_add(b, i->src[j]->value);
-               debug_printf("BB:%i liveset + %i\n", b->id, i->src[j]->value->n);
-            } else {
+            else
                live_set_rem(b, i->src[j]->value);
-               debug_printf("BB:%i liveset - %i\n", b->id, i->src[j]->value->n);
-            }
          }
       }
    }
@@ -653,7 +641,7 @@ static void collect_live_values(struct nv_basic_block *b, const int n)
    }
 }
 
-/* NOTE: the live intervals of phi functions start the the first non-phi instruction */
+/* NOTE: the live intervals of phi functions start at the first non-phi insn. */
 static int
 pass_build_intervals(struct nv_pc_pass *ctx, struct nv_basic_block *b)
 {
@@ -661,8 +649,6 @@ pass_build_intervals(struct nv_pc_pass *ctx, struct nv_basic_block *b)
    int j, s;
    const int n = (ctx->pc->num_values + 31) / 32;
 
-   debug_printf("building intervals for BB %i\n", b->id);
-
    /* verify that first block does not have live-in values */
    if (b->num_in == 0)
       for (j = 0; j < n; ++j)
@@ -700,7 +686,6 @@ pass_build_intervals(struct nv_pc_pass *ctx, struct nv_basic_block *b)
          add_range(&ctx->pc->values[j], b, b->exit->serial + 1);
       }
    }
-   debug_printf("%s: looping through instructions now\n", __func__);
 
    i_stop = b->entry ? b->entry->prev : NULL;
 
@@ -763,8 +748,6 @@ insert_ordered_tail(struct nv_value *list, struct nv_value *nval)
 {
    struct nv_value *elem = list->prev;
 
-   // debug_printf("inserting value %i\n", nval->n);
-
    for (elem = list->prev;
        elem != list && elem->livei->bgn > nval->livei->bgn;
        elem = elem->prev);
@@ -818,8 +801,6 @@ pass_linear_scan(struct nv_pc_pass *ctx, int iter)
    foreach_s(cur, tmp[0], &unhandled) {
       remove_from_list(cur);
 
-      /* debug_printf("handling value %i\n", cur->n); */
-
       foreach_s(val, tmp[1], &active) {
          if (livei_end(val) <= cur->livei->bgn) {
             reg_release(&free, val);
@@ -878,23 +859,19 @@ nv_pc_exec_pass1(struct nv_pc *pc)
    struct nv_pc_pass *ctx;
    int i, ret;
 
-   debug_printf("REGISTER ALLOCATION - entering\n");
+   NV50_DBGMSG("REGISTER ALLOCATION - entering\n");
 
    ctx = CALLOC_STRUCT(nv_pc_pass);
    if (!ctx)
       return -1;
    ctx->pc = pc;
 
-   nv_print_program(ctx->pc->root);
-
    ctx->insns = CALLOC(NV_PC_MAX_INSTRUCTIONS, sizeof(struct nv_instruction *));
 
    pc->pass_seq++;
    ret = pass_generate_phi_movs(ctx, pc->root);
    assert(!ret);
 
-   nv_print_program(ctx->pc->root);
-
    for (i = 0; i < pc->loop_nesting_bound; ++i) {
       pc->pass_seq++;
       ret = pass_build_live_sets(ctx, pc->root);
@@ -934,8 +911,7 @@ nv_pc_exec_pass1(struct nv_pc *pc)
    for (i = 0; i < pc->num_values; ++i)
       livei_release(&pc->values[i]);
 
-   debug_printf("REGISTER ALLOCATION - leaving\n");
-   nv_print_program(ctx->pc->root);
+   NV50_DBGMSG("REGISTER ALLOCATION - leaving\n");
 
 out:
    FREE(ctx);
index d4a75dc64afe6aa6627c1d2abd416b7c697be22c..182a591eb37726a4e74a9473a0636ba6ec07411c 100644 (file)
@@ -20,6 +20,8 @@
  * SOFTWARE.
  */
 
+/* #define NV50_PROGRAM_DEBUG */
+
 #include "nv50_program.h"
 #include "nv50_pc.h"
 #include "nv50_context.h"
@@ -187,8 +189,6 @@ prog_immediate(struct nv50_translation_info *ti,
    int c;
    unsigned n = ++ti->immd32_nr;
 
-   tgsi_dump_immediate(imm);
-
    if (n == (1 << (ffs(n) - 1)))
       ti->immd32 = REALLOC(ti->immd32, (n / 2) * 16, (n * 2) * 16);
 
@@ -228,7 +228,6 @@ prog_decl(struct nv50_translation_info *ti,
       sn = decl->Semantic.Name;
       si = decl->Semantic.Index;
    }
-   tgsi_dump_declaration(decl);
 
    switch (decl->Declaration.File) {
    case TGSI_FILE_INPUT:
@@ -492,6 +491,10 @@ nv50_prog_scan(struct nv50_translation_info *ti)
 
    tgsi_scan_shader(p->pipe.tokens, &ti->scan);
 
+#ifdef NV50_PROGRAM_DEBUG
+   tgsi_dump(p->pipe.tokens, 0);
+#endif
+
    tgsi_parse_init(&parse, p->pipe.tokens);
    while (!tgsi_parse_end_of_tokens(&parse)) {
       tgsi_parse_token(&parse);
index 7b2ccef7042d4acd40f31d68be7cd9253daa1208..115b5df9391abc87045ba8216187c320c0dde5d3 100644 (file)
@@ -20,6 +20,8 @@
  * SOFTWARE.
  */
 
+/* #define NV50_TGSI2NC_DEBUG */
+
 /* XXX: need to clean this up so we get the typecasting right more naturally */
 
 #include <unistd.h>
@@ -1015,10 +1017,8 @@ emit_fetch(struct bld_context *bld, const struct tgsi_full_instruction *insn,
       abort();
       break;      
    }
-   if (!res) {
-      debug_printf("WARNING: undefined source value in TGSI instruction\n");
-      return bld_load_imm_u32(bld, 0);
-   }
+   if (!res)
+      return bld_undef(bld, NV_FILE_GPR);
 
    switch (tgsi_util_get_full_src_register_sign_mode(src, chan)) {
    case TGSI_UTIL_SIGN_KEEP:
@@ -1234,7 +1234,9 @@ bld_instruction(struct bld_context *bld,
    int c;
    uint opcode = translate_opcode(insn->Instruction.Opcode);
 
-   tgsi_dump_instruction(insn, 1);
+#ifdef NV50_TGSI2NC_DEBUG
+   debug_printf("bld_instruction:"); tgsi_dump_instruction(insn, 1);
+#endif
        
    switch (insn->Instruction.Opcode) {
    case TGSI_OPCODE_ADD: