From a6db40605e87610f083cca5063ed112af73cb202 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Thu, 19 Aug 2021 17:52:54 -0700 Subject: [PATCH] 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 Part-of: --- 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