i965/fs: Allocate single register at a time for constants.
authorMatt Turner <mattst88@gmail.com>
Mon, 1 Feb 2016 19:14:01 +0000 (11:14 -0800)
committerMatt Turner <mattst88@gmail.com>
Thu, 4 Feb 2016 17:30:58 +0000 (09:30 -0800)
No instruction counts changed, but:

  total cycles in shared programs: 64834502 -> 64781530 (-0.08%)
  cycles in affected programs: 16331544 -> 16278572 (-0.32%)
  helped: 4757
  HURT: 4288

  GAINED: 66
  LOST:   20

I remember trying this when I first wrote the pass, but it wasn't
helpful at the time.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/mesa/drivers/dri/i965/brw_fs_combine_constants.cpp

index 994c699bb5a5d4b6d3bd83b970d6292259073cab..d7a1456bce027514f1ba96b275b009c68858b355 100644 (file)
@@ -268,7 +268,7 @@ fs_visitor::opt_combine_constants()
       qsort(table.imm, table.len, sizeof(struct imm), compare);
 
    /* Insert MOVs to load the constant values into GRFs. */
-   fs_reg reg(VGRF, alloc.allocate(dispatch_width / 8));
+   fs_reg reg(VGRF, alloc.allocate(1));
    reg.stride = 0;
    for (int i = 0; i < table.len; i++) {
       struct imm *imm = &table.imm[i];
@@ -284,8 +284,8 @@ fs_visitor::opt_combine_constants()
       imm->subreg_offset = reg.subreg_offset;
 
       reg.subreg_offset += sizeof(float);
-      if ((unsigned)reg.subreg_offset == dispatch_width * sizeof(float)) {
-         reg.nr = alloc.allocate(dispatch_width / 8);
+      if ((unsigned)reg.subreg_offset == 8 * sizeof(float)) {
+         reg.nr = alloc.allocate(1);
          reg.subreg_offset = 0;
       }
    }