v3d: Include a count of register pressure in the RA failure dumps.
authorEric Anholt <eric@anholt.net>
Thu, 21 Feb 2019 20:47:37 +0000 (12:47 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 6 Mar 2019 22:13:45 +0000 (14:13 -0800)
You usually want to go find the highest pressure and figure out why you
couldn't spill or what pattern led to a bunch of pressure leading to that
point.

src/broadcom/compiler/vir_dump.c

index 7f58c59a31b48821dc479c44faa523ead3a159f5..8fd32931c1bfe524309554215aa1e4a67aac17e6 100644 (file)
@@ -348,11 +348,19 @@ void
 vir_dump(struct v3d_compile *c)
 {
         int ip = 0;
+        int pressure = 0;
 
         vir_for_each_block(block, c) {
                 fprintf(stderr, "BLOCK %d:\n", block->index);
                 vir_for_each_inst(inst, block) {
                         if (c->live_intervals_valid) {
+                                for (int i = 0; i < c->num_temps; i++) {
+                                        if (c->temp_start[i] == ip)
+                                                pressure++;
+                                }
+
+                                fprintf(stderr, "P%4d ", pressure);
+
                                 bool first = true;
 
                                 for (int i = 0; i < c->num_temps; i++) {
@@ -364,7 +372,10 @@ vir_dump(struct v3d_compile *c)
                                         } else {
                                                 fprintf(stderr, ", ");
                                         }
-                                        fprintf(stderr, "S%4d", i);
+                                        if (BITSET_TEST(c->spillable, i))
+                                                fprintf(stderr, "S%4d", i);
+                                        else
+                                                fprintf(stderr, "U%4d", i);
                                 }
 
                                 if (first)
@@ -386,6 +397,7 @@ vir_dump(struct v3d_compile *c)
                                                 fprintf(stderr, ", ");
                                         }
                                         fprintf(stderr, "E%4d", i);
+                                        pressure--;
                                 }
 
                                 if (first)