Mesa (main): nir/algebraic: Add some extract optimizations
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Aug 24 20:19:21 UTC 2021
Module: Mesa
Branch: main
Commit: a6db40605e87610f083cca5063ed112af73cb202
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6db40605e87610f083cca5063ed112af73cb202
Author: Ian Romanick <ian.d.romanick at intel.com>
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 <jason at jlekstrand.net>
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
More information about the mesa-commit
mailing list