From de8b03f5fbd32f12a0b8257a2ae8e4e26b5ca05b Mon Sep 17 00:00:00 2001
From: Timothy Arceri <timothy.arceri@collabora.com>
Date: Sun, 8 Jan 2017 23:52:59 +1100
Subject: nir: don't turn ieq/ine into inot if used by an if

Otherwise we will end up with an extra instruction to compare the
result of the inot.

On BDW:

total instructions in shared programs: 13060620 -> 13060481 (-0.00%)
instructions in affected programs: 103379 -> 103240 (-0.13%)
helped: 127
HURT: 0

total cycles in shared programs: 256590950 -> 256587408 (-0.00%)
cycles in affected programs: 11324730 -> 11321188 (-0.03%)
helped: 114
HURT: 21

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
---
 src/compiler/nir/nir_opt_algebraic.py | 4 ++--
 src/compiler/nir/nir_search_helpers.h | 6 ++++++
 2 files changed, 8 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index 1852a4d53f3..a557f7bf37d 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -267,9 +267,9 @@ optimizations = [
    (('~frcp', ('frsq', a)), ('fsqrt', a), '!options->lower_fsqrt'),
    # Boolean simplifications
    (('ieq', 'a@bool', True), a),
-   (('ine', 'a@bool', True), ('inot', a)),
+   (('ine(is_not_used_by_if)', 'a@bool', True), ('inot', a)),
    (('ine', 'a@bool', False), a),
-   (('ieq', 'a@bool', False), ('inot', 'a')),
+   (('ieq(is_not_used_by_if)', 'a@bool', False), ('inot', 'a')),
    (('bcsel', a, True, False), a),
    (('bcsel', a, False, True), ('inot', a)),
    (('bcsel@32', a, 1.0, 0.0), ('b2f', a)),
diff --git a/src/compiler/nir/nir_search_helpers.h b/src/compiler/nir/nir_search_helpers.h
index ebb77ae67aa..e925a2ba024 100644
--- a/src/compiler/nir/nir_search_helpers.h
+++ b/src/compiler/nir/nir_search_helpers.h
@@ -130,4 +130,10 @@ is_used_more_than_once(nir_alu_instr *instr)
    return true;
 }
 
+static inline bool
+is_not_used_by_if(nir_alu_instr *instr)
+{
+   return list_empty(&instr->dest.dest.ssa.if_uses);
+}
+
 #endif /* _NIR_SEARCH_ */
-- 
cgit v1.2.3