diff options
author | Timothy Arceri <[email protected]> | 2019-04-03 13:24:18 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2019-04-03 13:24:18 +1100 |
commit | d8ce915a6156f9669b395c48411ec89997cf2fe8 (patch) | |
tree | 702c674395ae8c1aaad59e204c8b26857189c6e2 /src/compiler/nir/nir_opt_if.c | |
parent | 4218b6422cf1ff70c7f0feeec699a35e88522ed7 (diff) |
Revert "nir: propagate known constant values into the if-then branch"
This reverts commit 4218b6422cf1ff70c7f0feeec699a35e88522ed7.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110311
Diffstat (limited to 'src/compiler/nir/nir_opt_if.c')
-rw-r--r-- | src/compiler/nir/nir_opt_if.c | 60 |
1 files changed, 0 insertions, 60 deletions
diff --git a/src/compiler/nir/nir_opt_if.c b/src/compiler/nir/nir_opt_if.c index af63b90f249..4d3183ed151 100644 --- a/src/compiler/nir/nir_opt_if.c +++ b/src/compiler/nir/nir_opt_if.c @@ -1326,65 +1326,6 @@ opt_if_merge(nir_if *nif) return progress; } -/* Perform optimisations based on the values we can derive from the evaluation - * of if-statement conditions. - */ -static bool -opt_for_known_values(nir_builder *b, nir_if *nif) -{ - bool progress = false; - - assert(nif->condition.is_ssa); - nir_ssa_def *if_cond = nif->condition.ssa; - - if (if_cond->parent_instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(if_cond->parent_instr); - switch (alu->op) { - case nir_op_feq: - case nir_op_ieq: { - nir_load_const_instr *load_const = NULL; - nir_ssa_def *unknown_val = NULL; - - nir_ssa_def *src0 = alu->src[0].src.ssa; - nir_ssa_def *src1 = alu->src[1].src.ssa; - if (src0->parent_instr->type == nir_instr_type_load_const) { - load_const = nir_instr_as_load_const(src0->parent_instr); - unknown_val = src1; - } else if (src1->parent_instr->type == nir_instr_type_load_const) { - load_const = nir_instr_as_load_const(src1->parent_instr); - unknown_val = src0; - } - - if (!load_const) - return false; - - /* TODO: remove this and support swizzles? */ - if (unknown_val->num_components != 1) - return false; - - /* Replace unknown ssa uses with the known constant */ - nir_foreach_use_safe(use_src, unknown_val) { - nir_cursor cursor = nir_before_src(use_src, false); - nir_block *use_block = nir_cursor_current_block(cursor); - if (nir_block_dominates(nir_if_first_then_block(nif), use_block)) { - nir_instr_rewrite_src(use_src->parent_instr, use_src, - nir_src_for_ssa(&load_const->def)); - progress = true; - } - } - - break; - } - - default: - return false; - } - - return progress; -} - static bool opt_if_cf_list(nir_builder *b, struct exec_list *cf_list) { @@ -1439,7 +1380,6 @@ opt_if_safe_cf_list(nir_builder *b, struct exec_list *cf_list) progress |= opt_if_safe_cf_list(b, &nif->then_list); progress |= opt_if_safe_cf_list(b, &nif->else_list); progress |= opt_if_evaluate_condition_use(b, nif); - progress |= opt_for_known_values(b, nif); break; } |