pan/mdg: Use more accurate ld/st reg estimates
authorAlyssa Rosenzweig <alyssa@collabora.com>
Wed, 9 Jun 2021 17:17:04 +0000 (13:17 -0400)
committerMarge Bot <eric+marge@anholt.net>
Thu, 10 Jun 2021 18:06:10 +0000 (18:06 +0000)
And assert that we got them right.

Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11123>

src/panfrost/midgard/midgard_schedule.c

index de261d3..085d465 100644 (file)
@@ -530,13 +530,21 @@ mir_pipeline_count(midgard_instruction *ins)
                 /* Skip empty source  */
                 if (ins->src[i] == ~0) continue;
 
-                unsigned bytemask = mir_bytemask_of_read_components_index(ins, i);
-
-                unsigned max = util_logbase2(bytemask) + 1;
-                bytecount += max;
+                if (i == 0) {
+                        /* First source is a vector, worst-case the mask */
+                        unsigned bytemask = mir_bytemask_of_read_components_index(ins, i);
+                        unsigned max = util_logbase2(bytemask) + 1;
+                        bytecount += max;
+                } else {
+                        /* Sources 1 on are scalars */
+                        bytecount += 4;
+                }
         }
 
-        return DIV_ROUND_UP(bytecount, 16);
+        unsigned dwords = DIV_ROUND_UP(bytecount, 16);
+        assert(dwords <= 2);
+
+        return dwords;
 }
 
 /* Matches FADD x, x with modifiers compatible. Since x + x = x * 2, for