intel/fs/live_variables: Do compute_start_end in BITSET_WORD chunks
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 15 May 2019 17:06:38 +0000 (12:06 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Thu, 16 May 2019 02:14:40 +0000 (02:14 +0000)
commitfce0214e94ef2f95693d4c51e823ea7eca8b6dab
treec98638a7583e455195e443a464d25599aff3aa50
parentb2d274c6775003e8b6b4aa015a2d8c336fed6fdc
intel/fs/live_variables: Do compute_start_end in BITSET_WORD chunks

For a block with a contiguous chunk of 32 vars that don't need updating,
this lets us skip 32 vars at a time. Also, by using bitscan, we only
iterate for each set bit rather than testing them all one at a time.
Looking at perf (with -O0 which is unfortunately necessary to get
reasonable back-traces), this seems to cuts about 50-60% of the time
spent in compute_start_end() which is, itself about 4-6% of the
run-time. In the real world, with a release driver build, this cuts
1.34% off a full shader-db run. (I ran shader-db 5 times in each
configuration).

Reviewed-by: Matt Turner <mattst88@gmail.com>
src/intel/compiler/brw_fs_live_variables.cpp