Module: Mesa Branch: main Commit: a6db40605e87610f083cca5063ed112af73cb202 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6db40605e87610f083cca5063ed112af73cb202
Author: Ian Romanick <[email protected]> Date: Thu Aug 19 17:52:54 2021 -0700 nir/algebraic: Add some extract optimizations These help quite a bit when vectored versions of SpvOpSDotKHR and friends are emitted as packed versions and then lowered. Reviewed-by: Jason Ekstrand <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12142> --- src/compiler/nir/nir_opt_algebraic.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index ee876b8b7ab..bb07031e615 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -1422,6 +1422,15 @@ optimizations.extend([ (('iadd', ('pack_half_2x16_split', a, 0), ('pack_half_2x16_split', 0, b)), ('pack_half_2x16_split', a, b)), (('ior', ('pack_half_2x16_split', a, 0), ('pack_half_2x16_split', 0, b)), ('pack_half_2x16_split', a, b)), + + (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 0), ('i2i', a)), + (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 1), ('i2i', b)), + (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 2), ('i2i', c)), + (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 3), ('i2i', d)), + (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 0), ('u2u', a)), + (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 1), ('u2u', b)), + (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 2), ('u2u', c)), + (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 3), ('u2u', d)), ]) # After the ('extract_u8', a, 0) pattern, above, triggers, there will be @@ -2531,6 +2540,11 @@ late_optimizations = [ (('ishr', a, 0), a), (('ishr', a, -32), a), (('ushr', a, 0), a), + + (('extract_i8', ('extract_i8', a, b), 0), ('extract_i8', a, b)), + (('extract_i8', ('extract_u8', a, b), 0), ('extract_i8', a, b)), + (('extract_u8', ('extract_i8', a, b), 0), ('extract_u8', a, b)), + (('extract_u8', ('extract_u8', a, b), 0), ('extract_u8', a, b)), ] # A few more extract cases we'd rather leave late
