nir: Add lowering for ifind_msb to ufind_msb.
authorEric Anholt <eric@anholt.net>
Fri, 4 May 2018 20:33:47 +0000 (13:33 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 6 Jun 2018 20:44:28 +0000 (13:44 -0700)
ufind_msb is easily expressed in terms of clz, and we can reduce ifind_msb
to that.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/nir/nir.h
src/compiler/nir/nir_opt_algebraic.py

index 519c0198879c65b012bd7de7847e547726c63f8e..9fca61f00706c8326d4f6b94fb8bd8ff279f3331 100644 (file)
@@ -1913,6 +1913,8 @@ typedef struct nir_shader_compiler_options {
    bool lower_bitfield_insert_to_shifts;
    /** Lowers bfm to shifts and subtracts. */
    bool lower_bfm;
+   /** Lowers ifind_msb to compare and ufind_msb */
+   bool lower_ifind_msb;
    bool lower_uadd_carry;
    bool lower_usub_borrow;
    /** lowers fneg and ineg to fsub and isub. */
index eaa8b141640b9f8621257a21098357640474eba4..f6685977f3afec3d6eef9b132f56e0f9659e37e9 100644 (file)
@@ -555,6 +555,10 @@ optimizations = [
       ('bfm', 'bits', 0))),
     'options->lower_bitfield_extract_to_shifts'),
 
+   (('ifind_msb', 'value'),
+    ('ufind_msb', ('bcsel', ('ilt', 'value', 0), ('inot', 'value'), 'value')),
+    'options->lower_ifind_msb'),
+
    (('extract_i8', a, 'b@32'),
     ('ishr', ('ishl', a, ('imul', ('isub', 3, b), 8)), 24),
     'options->lower_extract_byte'),