i965/fs: Fix split_virtual_grfs() when delta_xy not in a virtual register.
authorPaul Berry <stereotype441@gmail.com>
Fri, 21 Oct 2011 21:16:25 +0000 (14:16 -0700)
committerPaul Berry <stereotype441@gmail.com>
Thu, 27 Oct 2011 22:31:47 +0000 (15:31 -0700)
This patch modifies the special case in
fs_visitor::split_virtual_grfs() that prevents splitting from being
applied to the delta_x/delta_y register pair (this register pair needs
to remain contiguous so that it can be used by the PLN instruction).

When gen>=6, this register pair is in a fixed location, not a virtual
register, so it was in no danger of being split.  And
split_virtual_grfs' attempt not to split it was preventing some other
unrelated register from being split.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_fs.cpp

index c0d93c03a2e7a39e17306d644b95ca6072c39aad..3848915cf80caa4a71763230c0a8d14644e933de 100644 (file)
@@ -768,7 +768,7 @@ fs_visitor::split_virtual_grfs()
         split_grf[i] = false;
    }
 
-   if (brw->has_pln) {
+   if (brw->has_pln && this->delta_x.file == GRF) {
       /* PLN opcodes rely on the delta_xy being contiguous. */
       split_grf[this->delta_x.reg] = false;
    }