diff options
-rw-r--r-- | src/intel/compiler/brw_compiler.c | 4 | ||||
-rw-r--r-- | src/intel/compiler/brw_nir.c | 14 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_nir.cpp | 25 |
3 files changed, 13 insertions, 30 deletions
diff --git a/src/intel/compiler/brw_compiler.c b/src/intel/compiler/brw_compiler.c index 6d9dac6c3ca..7ceeb14c70f 100644 --- a/src/intel/compiler/brw_compiler.c +++ b/src/intel/compiler/brw_compiler.c @@ -133,7 +133,9 @@ brw_compiler_create(void *mem_ctx, const struct gen_device_info *devinfo) nir_lower_dceil | nir_lower_dfract | nir_lower_dround_even | - nir_lower_dmod; + nir_lower_dmod | + nir_lower_dsub | + nir_lower_ddiv; if (!devinfo->has_64bit_types || (INTEL_DEBUG & DEBUG_SOFT64)) { int64_options |= nir_lower_mov64 | diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index a0805758160..675fe026695 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -681,18 +681,8 @@ brw_preprocess_nir(const struct brw_compiler *compiler, nir_shader *nir, brw_nir_optimize(nir, compiler, is_scalar, true); - bool lowered_64bit_ops = false; - do { - progress = false; - - OPT(nir_lower_int64, nir->options->lower_int64_options); - OPT(nir_lower_doubles, softfp64, nir->options->lower_doubles_options); - - /* Necessary to lower add -> sub and div -> mul/rcp */ - OPT(nir_opt_algebraic); - - lowered_64bit_ops |= progress; - } while (progress); + OPT(nir_lower_doubles, softfp64, nir->options->lower_doubles_options); + OPT(nir_lower_int64, nir->options->lower_int64_options); /* This needs to be run after the first optimization pass but before we * lower indirect derefs away diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index be1fc3b2484..9bd69383373 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -367,23 +367,14 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog, if (lower_64bit) { bool lowered_64bit_ops = false; - bool progress = false; - - NIR_PASS_V(nir, nir_opt_algebraic); - - do { - progress = false; - if (options->lower_int64_options) { - NIR_PASS(progress, nir, nir_lower_int64, - options->lower_int64_options); - } - if (options->lower_doubles_options) { - NIR_PASS(progress, nir, nir_lower_doubles, - st->ctx->SoftFP64, options->lower_doubles_options); - } - NIR_PASS(progress, nir, nir_opt_algebraic); - lowered_64bit_ops |= progress; - } while (progress); + if (options->lower_doubles_options) { + NIR_PASS(lowered_64bit_ops, nir, nir_lower_doubles, + st->ctx->SoftFP64, options->lower_doubles_options); + } + if (options->lower_int64_options) { + NIR_PASS(lowered_64bit_ops, nir, nir_lower_int64, + options->lower_int64_options); + } if (lowered_64bit_ops) st_nir_opts(nir, is_scalar); |