nir: add an instruction set API
authorConnor Abbott <cwabbott0@gmail.com>
Thu, 24 Sep 2015 05:57:04 +0000 (01:57 -0400)
committerConnor Abbott <cwabbott0@gmail.com>
Fri, 9 Oct 2015 14:14:35 +0000 (10:14 -0400)
commit523a28d3fe0dd371ae01b7353f263a6541480d89
tree287f44d7d8c02b573ebad1aa850ed785c61b4070
parent005c2efb7b755ac5887dc5938baa7d95a50fe853
nir: add an instruction set API

This will replace direct usage of nir_instrs_equal() in the CSE pass,
which reduces an O(n^2) algorithm with an effectively O(n) one. It'll
also be useful for implementing GVN on top of GCM.

v2:
- Add texture support.
- Add more comments.
- Rename instr_can_hash() to instr_can_rewrite() since it's really more
about whether its uses can be rewritten, and it's implicitly used by
nir_instrs_equal() as well.
- Rename nir_instr_set_add() to nir_instr_set_add_or_rewrite() (Jason).
- Make the HASH() macro less magical (Topi).
- Rewrite the commit message.

v3:
- For sorting phi sources, use a VLA, store pointers to the sources, and
compare the predecessor pointer directly (Jason).

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
Signed-off-by: Connor Abbott <cwabbott0@gmail.com>
src/glsl/nir/nir_instr_set.c
src/glsl/nir/nir_instr_set.h