[Mesa-dev] [PATCH 00/10] nir: Implment global code motion

Jason Ekstrand jason at jlekstrand.net
Thu Feb 5 14:28:55 PST 2015

This patch series provides an implementation of the global code motion
algorithm.  The first 6 patches are fixups for pre-existing bugs in NIR,
the next 2 are add features needed by GCM, and the last two add GCM and
turn it on in i965.  Shader-db numbers are as follows:

total NIR instructions in shared programs: 2045293 -> 2044661 (-0.03%)
NIR instructions in affected programs:     425878 -> 425246 (-0.15%)
helped:                                    662
HURT:                                      1084

total FS instructions in shared programs: 4284416 -> 4288217 (0.09%)
FS instructions in affected programs:     1442457 -> 1446258 (0.26%)
helped:                                   2646
HURT:                                     4227
GAINED:                                   72
LOST:                                     70

Given that it actually hurts things a bit, we probably don't want to turn
it on at the moment.  My best guess as to why it's hurting things is that
it moves instructions into ifs and keeps us from doing our select peephole.
We need to come up with a solution for this, but I'm not too worried about

The branch can be found here:


Jason Ekstrand (10):
  nir: use nir_foreach_ssa_def for indexing ssa defs
  nir: Properly clean up CF nodes when we remove them
  nir/validate: Validate if_uses on registers
  nir/validate: Validate SSA defs the same way we do for registers
  nir/from_ssa: Don't try to read an invalid instruction
  nir: Make nir_[cf_node/instr]_[prev/next] return null if at the end
  nir/dominance: Also record the dominance depth
  nir: Add an instruction index
  nir: Add a global code motion (GCM) pass
  i965/nir: Use Global Code Motion

 src/glsl/Makefile.sources                |   1 +
 src/glsl/nir/nir.c                       |  96 ++++--
 src/glsl/nir/nir.h                       |  37 ++-
 src/glsl/nir/nir_dominance.c             |   9 +-
 src/glsl/nir/nir_from_ssa.c              |   2 +-
 src/glsl/nir/nir_opt_gcm.c               | 499 +++++++++++++++++++++++++++++++
 src/glsl/nir/nir_validate.c              | 141 +++++++--
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp |   2 +
 8 files changed, 737 insertions(+), 50 deletions(-)
 create mode 100644 src/glsl/nir/nir_opt_gcm.c


More information about the mesa-dev mailing list