gallivm: only fetch pointers to constant buffers once
authorRoland Scheidegger <sroland@vmware.com>
Wed, 14 May 2014 13:43:53 +0000 (15:43 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Wed, 14 May 2014 14:23:33 +0000 (16:23 +0200)
commit8a9f5ecdb116d0449d63f7b94efbfa8b205d826f
tree2be5cbce240d5ab6197c8c3e92d9e693e7b50196
parent18c6454ad19d5d323af7b3318f18c409b84c7a12
gallivm: only fetch pointers to constant buffers once

In 1d35f77228ad540a551a8e09e062b764a6e31f5e support for multiple constant
buffers was introduced. This meant we had another indirection, and we did
resolve the indirection for each constant buffer access. This looks very
reasonable since llvm can figure out if it's the same pointer, however it
turns out that this can cause llvm compilation time to go through the roof
and beyond (I've seen cases in excess of factor 100, e.g. from 50 ms to more
than 10 seconds (!)), with all the additional time spent in IR optimization
passes (and in the end all of it in DominatorTree::dominate()).
I've been unable to narrow it down a bit more (only some shaders seem affected,
seemingly without much correlation to overall shader complexity or constant
usage) but it is easily avoidable by doing the buffer lookups themeselves just
once (at constant buffer declaration time).

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c