vc4: Emit max number of temps in the shader-db output.
authorEric Anholt <eric@anholt.net>
Fri, 24 Feb 2017 22:18:39 +0000 (14:18 -0800)
committerEric Anholt <eric@anholt.net>
Sat, 25 Feb 2017 00:31:54 +0000 (16:31 -0800)
We need to be paying attention to optimization's impact on this -- even if
we reduce instruction count, increasing max temps in general is likely to
cause us to fail to register allocate on some shaders, which means that
those won't run at all.

src/gallium/drivers/vc4/vc4_qir_live_variables.c

index 330e1c8f7a9d920bccc2d046e49522f1ddcab13a..7108b3ee9b652ac9e2c656c344eb5906de0719f3 100644 (file)
@@ -327,4 +327,27 @@ qir_calculate_live_intervals(struct vc4_compile *c)
                 ;
 
         qir_compute_start_end(c, c->num_temps);
+
+        if (vc4_debug & VC4_DEBUG_SHADERDB) {
+                int last_ip = 0;
+                for (int i = 0; i < c->num_temps; i++)
+                        last_ip = MAX2(last_ip, c->temp_end[i]);
+
+                int reg_pressure = 0;
+                int max_reg_pressure = 0;
+                for (int i = 0; i < last_ip; i++) {
+                        for (int j = 0; j < c->num_temps; j++) {
+                                if (c->temp_start[j] == i)
+                                        reg_pressure++;
+                                if (c->temp_end[j] == i)
+                                        reg_pressure--;
+                        }
+                        max_reg_pressure = MAX2(max_reg_pressure, reg_pressure);
+                }
+
+                fprintf(stderr, "SHADER-DB: %s prog %d/%d: %d max temps\n",
+                        qir_get_stage_name(c->stage),
+                        c->program_id, c->variant_id,
+                        max_reg_pressure);
+        }
 }