nir: Add a lower_fdiv option and use it in i965
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 5 Sep 2015 01:47:42 +0000 (18:47 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 5 Sep 2015 01:50:14 +0000 (18:50 -0700)
src/glsl/nir/nir.h
src/glsl/nir/nir_opt_algebraic.py
src/mesa/drivers/dri/i965/brw_shader.cpp

index 4c60dbd645a1a97d99776f4b6b58624123f8ee87..415dda7712dbea55aea5f8fdf56652ff1a7d8800 100644 (file)
@@ -1433,6 +1433,7 @@ typedef struct nir_function {
 
 typedef struct nir_shader_compiler_options {
    bool lower_ffma;
+   bool lower_fdiv;
    bool lower_flrp;
    bool lower_fpow;
    bool lower_fsat;
index 226e0a8d85c3696584a9406608af49b4f58619eb..880408bc3678c5b0bb4a704b7dd6ca57f16e0e2f 100644 (file)
@@ -66,6 +66,7 @@ optimizations = [
    (('imul', a, 1), a),
    (('fmul', a, -1.0), ('fneg', a)),
    (('imul', a, -1), ('ineg', a)),
+   (('fdiv', a, b), ('fmul', a, ('frcp', b)), 'options->lower_fdiv'),
    (('ffma', 0.0, a, b), b),
    (('ffma', a, 0.0, b), b),
    (('ffma', a, b, 0.0), ('fmul', a, b)),
index 0007e5c07a5ea56f794c490c72a262ceff71826c..4ef2777559f36e2a23952bdce2d0f78c04d3dbea 100644 (file)
@@ -96,6 +96,7 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)
     */
    nir_options->lower_ffma = true;
    nir_options->lower_sub = true;
+   nir_options->lower_fdiv = true;
 
    /* We want the GLSL compiler to emit code that uses condition codes */
    for (int i = 0; i < MESA_SHADER_STAGES; i++) {