Mesa (main): nir/opt_algebraic: lower fneg_hi/lo to fmul

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Dec 21 16:37:45 UTC 2021


Module: Mesa
Branch: main
Commit: 17ecd0b31a1f2f58281c225efc843f14b36ce03d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=17ecd0b31a1f2f58281c225efc843f14b36ce03d

Author: Daniel Schürmann <daniel at schuermann.dev>
Date:   Thu Oct  7 20:21:24 2021 +0200

nir/opt_algebraic: lower fneg_hi/lo to fmul

This pattern, found in the FSR upscaling shader,
helps the vectorization efforts by keeping the
chain of vectorized instructions intact.
Radeon can optimize it to per-component fneg modifiers.

Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13688>

---

 src/compiler/nir/nir_opt_algebraic.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index 1fd7aa4ce7a..a500a4ca8bf 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -2492,6 +2492,10 @@ late_optimizations = [
    (('iadd', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)'), ('iadd3', a, ('ineg', b), c), 'options->has_iadd3'),
    (('isub', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)'), ('iadd3', a, ('ineg', b), ('ineg', c)), 'options->has_iadd3'),
 
+    # fneg_lo / fneg_hi
+   (('vec2(is_only_used_as_float)', ('fneg at 16', a), b), ('fmul', ('vec2', a, b), ('vec2', -1.0, 1.0)), 'options->vectorize_vec2_16bit'),
+   (('vec2(is_only_used_as_float)', a, ('fneg at 16', b)), ('fmul', ('vec2', a, b), ('vec2', 1.0, -1.0)), 'options->vectorize_vec2_16bit'),
+
    # These are duplicated from the main optimizations table.  The late
    # patterns that rearrange expressions like x - .5 < 0 to x < .5 can create
    # new patterns like these.  The patterns that compare with zero are removed



More information about the mesa-commit mailing list