nir: Separate 32 and 64-bit fmod lowering
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Thu, 28 Apr 2016 10:19:13 +0000 (12:19 +0200)
committerSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Wed, 4 May 2016 06:07:49 +0000 (08:07 +0200)
Split 32-bit and 64-bit fmod lowering as the drivers might need to
lower them separately inside NIR depending on the HW support.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/compiler/nir/nir.h
src/compiler/nir/nir_opt_algebraic.py
src/mesa/drivers/dri/i965/brw_compiler.c

index de573b45c08f9d9bac878f868a3a3a689589596e..98451c6dbb9c1c8cb07f258aaedbf2ebdcb854f6 100644 (file)
@@ -1630,7 +1630,8 @@ typedef struct nir_shader_compiler_options {
    bool lower_fpow;
    bool lower_fsat;
    bool lower_fsqrt;
-   bool lower_fmod;
+   bool lower_fmod32;
+   bool lower_fmod64;
    bool lower_bitfield_extract;
    bool lower_bitfield_insert;
    bool lower_uadd_carry;
index f181044faf255f19f394f5d678c8c1ad59b07c2b..0a95725f962f29616994aed6d523e0f5eb904068 100644 (file)
@@ -296,8 +296,9 @@ optimizations = [
    (('iadd', '#a', ('iadd', b, '#c')), ('iadd', ('iadd', a, c), b)),
 
    # Misc. lowering
-   (('fmod', a, b), ('fsub', a, ('fmul', b, ('ffloor', ('fdiv', a, b)))), 'options->lower_fmod'),
-   (('frem', a, b), ('fsub', a, ('fmul', b, ('ftrunc', ('fdiv', a, b)))), 'options->lower_fmod'),
+   (('fmod@32', a, b), ('fsub', a, ('fmul', b, ('ffloor', ('fdiv', a, b)))), 'options->lower_fmod32'),
+   (('fmod@64', a, b), ('fsub', a, ('fmul', b, ('ffloor', ('fdiv', a, b)))), 'options->lower_fmod64'),
+   (('frem', a, b), ('fsub', a, ('fmul', b, ('ftrunc', ('fdiv', a, b)))), 'options->lower_fmod32'),
    (('uadd_carry@32', a, b), ('b2i', ('ult', ('iadd', a, b), a)), 'options->lower_uadd_carry'),
    (('usub_borrow@32', a, b), ('b2i', ('ult', a, b)), 'options->lower_usub_borrow'),
 
index 61bb5ade282e1d9f61da024753c7cc4c7e8a0bd0..9977d792679bf867323a0546519e7c468d475f44 100644 (file)
@@ -76,7 +76,7 @@ shader_perf_log_mesa(void *data, const char *fmt, ...)
    .lower_sub = true,                                                         \
    .lower_fdiv = true,                                                        \
    .lower_scmp = true,                                                        \
-   .lower_fmod = true,                                                        \
+   .lower_fmod32 = true,                                                      \
    .lower_bitfield_extract = true,                                            \
    .lower_bitfield_insert = true,                                             \
    .lower_uadd_carry = true,                                                  \