I was poking around with build sizes yesterday and realized that NIR, even when built with -Os, is over 1 MB. That seemed a bit insane (libLLVM.so is only 37 MB on my system) so I went digging for places where we may be able to save a few KB. The first two patches just shrink some datatypes so that the alu and intrinsic info tables are a bit smaller. The other 5 are some size optimizations that shrink nir_opt_algebraic.o from 280KB to 44KB when built with -Os.
I'm a bit unsure of what I think about the nir_opt_algebraic changes with "compact" expressions. They do shrink things by *a lot* but they also make it a bit more complicated (as if nir_search weren't complicated enough). In particular, it means that if add a field to one of the Python classes representing a variable, constant, or expression and don't properly add it to the implementaiton of __eq__, strange hard-to-debug things may happen. I'll let someone other than myself decide whether or not they think it's horrid. Jason Ekstrand (7): nir: Use uint8_t instead of unsigned for nir_intrinsic_info fields nir: Use uint8_t for nir_op_info fields nir/search: Make nir_replace_instr take a value for the search expression nir/search: Use bitfields to shrink struct sizes nir/search: Add support for "compact" expressions nir/algebraic: Make objects hashable nir/algebraic: Use compact expressions and don't emit duplicates src/compiler/nir/nir.h | 18 ++-- src/compiler/nir/nir_algebraic.py | 173 ++++++++++++++++++++++++++++---------- src/compiler/nir/nir_search.c | 78 ++++++++++++----- src/compiler/nir/nir_search.h | 40 +++++++-- 4 files changed, 225 insertions(+), 84 deletions(-) -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev