i965/fs: Fix broken register spilling debug code.
authorEric Anholt <eric@anholt.net>
Wed, 16 Oct 2013 19:02:41 +0000 (12:02 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 31 Oct 2013 00:50:59 +0000 (17:50 -0700)
Now that reg spilling generates new vgrfs, we were looping forever if you
ever turned it on.

Instead, move the debug code into the register allocator right near where
we'd be doing spilling anyway, which should more accurately reflect how
register spilling occurs in the wild.

Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp

index a60941a6a98dfc217957525ec562481ad52762bb..db48da2b615e98f5485e3f6bcfbbc67b64b5dfee 100644 (file)
@@ -3098,13 +3098,6 @@ fs_visitor::run()
       assign_curb_setup();
       assign_urb_setup();
 
-      if (0) {
-        /* Debug of register spilling: Go spill everything. */
-        for (int i = 0; i < virtual_grf_count; i++) {
-           spill_reg(i);
-        }
-      }
-
       if (0)
         assign_regs_trivial();
       else {
index 0b00b91694bfe53ff2e075f133d5b0a51eaa0585..d86027efd81b11ee2f64ff3142eaf2b0820526bf 100644 (file)
@@ -476,6 +476,17 @@ fs_visitor::assign_regs()
    if (brw->gen >= 7)
       setup_mrf_hack_interference(g, first_mrf_hack_node);
 
+   /* Debug of register spilling: Go spill everything. */
+   if (0) {
+      int reg = choose_spill_reg(g);
+
+      if (reg != -1) {
+         spill_reg(reg);
+         ralloc_free(g);
+         return false;
+      }
+   }
+
    if (!ra_allocate_no_spills(g)) {
       /* Failed to allocate registers.  Spill a reg, and the caller will
        * loop back into here to try again.