vc4: Add shader-db dumping of NIR instruction count.
authorEric Anholt <eric@anholt.net>
Fri, 20 Feb 2015 08:31:51 +0000 (00:31 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 1 Apr 2015 17:57:01 +0000 (10:57 -0700)
I was previously using temporary disables of VC4 optimization to show the
benefits of improved NIR optimization, but this can get me quick and dirty
numbers for NIR-only improvements without having to add hacks to disable
VC4's code (disabling of which might hide ways that the NIR changes would
hurt actual VC4 codegen).

src/gallium/drivers/vc4/vc4_program.c

index 1b87fe417d8d053ad64c343807561e2aa5c3edd8..5ed2165b014a2c1cda0957b1083b2e1ddb7769a4 100644 (file)
@@ -1994,6 +1994,28 @@ static const nir_shader_compiler_options nir_options = {
         .lower_negate = true,
 };
 
+static bool
+count_nir_instrs_in_block(nir_block *block, void *state)
+{
+        int *count = (int *) state;
+        nir_foreach_instr(block, instr) {
+                *count = *count + 1;
+        }
+        return true;
+}
+
+static int
+count_nir_instrs(nir_shader *nir)
+{
+        int count = 0;
+        nir_foreach_overload(nir, overload) {
+                if (!overload->impl)
+                        continue;
+                nir_foreach_block(overload->impl, count_nir_instrs_in_block, &count);
+        }
+        return count;
+}
+
 static struct vc4_compile *
 vc4_shader_ntq(struct vc4_context *vc4, enum qstage stage,
                        struct vc4_key *key)
@@ -2064,6 +2086,13 @@ vc4_shader_ntq(struct vc4_context *vc4, enum qstage stage,
 
         nir_convert_from_ssa(c->s);
 
+        if (vc4_debug & VC4_DEBUG_SHADERDB) {
+                fprintf(stderr, "SHADER-DB: %s prog %d/%d: %d NIR instructions\n",
+                        qir_get_stage_name(c->stage),
+                        c->program_id, c->variant_id,
+                        count_nir_instrs(c->s));
+        }
+
         if (vc4_debug & VC4_DEBUG_NIR) {
                 fprintf(stderr, "%s prog %d/%d NIR:\n",
                         qir_get_stage_name(c->stage),