summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/intel/compiler/brw_compiler.c4
-rw-r--r--src/intel/compiler/brw_nir.c14
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp25
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);