nir: fix if condition propagation for alu use
authorTimothy Arceri <tarceri@localhost.localdomain>
Wed, 31 Oct 2018 02:16:28 +0000 (13:16 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Wed, 31 Oct 2018 22:22:55 +0000 (09:22 +1100)
We need to update the cursor before we check if the alu use is
dominated by the if condition. Previously we were checking if
the current location of the alu instruction was dominated by
the if condition which would miss some optimisation opportunities.

Fixes: a3b4cb34589e ("nir/opt_if: Rework condition propagation")
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir_opt_if.c

index 1f2e1f21130c47f66f32d08ffbc123f80697ce44..1fe95e5376632ebe189b58ac92283f5951413245 100644 (file)
@@ -444,11 +444,10 @@ propagate_condition_eval(nir_builder *b, nir_if *nif, nir_src *use_src,
                          bool is_if_condition)
 {
    bool bool_value;
+   b->cursor = nir_before_src(alu_use, is_if_condition);
    if (!evaluate_if_condition(nif, b->cursor, &bool_value))
       return false;
 
-   b->cursor = nir_before_src(alu_use, is_if_condition);
-
    nir_ssa_def *def[2] = {0};
    for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) {
       if (alu->src[i].src.ssa == use_src->ssa) {