intel/nir: Vectorize all IO
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 7 Mar 2019 21:01:37 +0000 (15:01 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Tue, 12 Mar 2019 15:34:06 +0000 (15:34 +0000)
commit6d5d89d25a0a4299dbfcbfeca71b6c7e65ef3d45
tree47ae49a676ffc842f2fc0139a55720acf423a61e
parent5ef2b8f1f2ebcdb4ffe5c98b3f4f48e584cb4b22
intel/nir: Vectorize all IO

The IO scalarization pass that we run to help with linking end up
turning some shader I/O such as that for tessellation and geometry
shaders into many scalar URB operations rather than one vector one.  To
alleviate this, we now vectorize the I/O once again.  This fixes a 10%
performance regression in the GfxBench tessellation test that was caused
by scalarizing.

Shader-db results on Kaby Lake:

    total instructions in shared programs: 15224023 -> 15220871 (-0.02%)
    instructions in affected programs: 342009 -> 338857 (-0.92%)
    helped: 1236
    HURT: 443

    total spills in shared programs: 23471 -> 23465 (-0.03%)
    spills in affected programs: 6 -> 0
    helped: 1
    HURT: 0

    total fills in shared programs: 31770 -> 31766 (-0.01%)
    fills in affected programs: 4 -> 0
    helped: 1
    HURT: 0

Cycles was just a lot of churn do to moves being different places.  Most
of the pure churn in instructions was +/- one or two instructions in
fragment shaders.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107510
Fixes: 4434591bf56a "intel/nir: Call nir_lower_io_to_scalar_early"
Fixes: 8d8222461f9d "intel/nir: Enable nir_opt_find_array_copies"
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/intel/compiler/brw_nir.c