nir/opt_if: use nir_src_as_bool in opt_peel_loop_initial_if helper
authorRhys Perry <pendingchaos02@gmail.com>
Mon, 27 Apr 2020 10:53:50 +0000 (11:53 +0100)
committerMarge Bot <eric+marge@anholt.net>
Tue, 19 May 2020 17:46:38 +0000 (17:46 +0000)
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4757>

src/compiler/nir/nir_opt_if.c

index f2dec89ba7e334ca4b9fcb350cd548557c0d983e..4b2d0159baba5330648d4d561d283a25c9335831 100644 (file)
@@ -58,25 +58,23 @@ find_continue_block(nir_loop *loop)
 static bool
 phi_has_constant_from_outside_and_one_from_inside_loop(nir_phi_instr *phi,
                                                        const nir_block *entry_block,
-                                                       uint32_t *entry_val,
-                                                       uint32_t *continue_val)
+                                                       bool *entry_val,
+                                                       bool *continue_val)
 {
    /* We already know we have exactly one continue */
    assert(exec_list_length(&phi->srcs) == 2);
 
-   *entry_val = 0;
-   *continue_val = 0;
+   *entry_val = false;
+   *continue_val = false;
 
     nir_foreach_phi_src(src, phi) {
-       assert(src->src.is_ssa);
-       nir_const_value *const_src = nir_src_as_const_value(src->src);
-       if (!const_src)
-          return false;
+       if (!nir_src_is_const(src->src))
+         return false;
 
        if (src->pred != entry_block) {
-          *continue_val = const_src[0].u32;
+          *continue_val = nir_src_as_bool(src->src);
        } else {
-          *entry_val = const_src[0].u32;
+          *entry_val = nir_src_as_bool(src->src);
        }
     }
 
@@ -169,7 +167,7 @@ opt_peel_loop_initial_if(nir_loop *loop)
    if (cond->parent_instr->block != header_block)
       return false;
 
-   uint32_t entry_val = 0, continue_val = 0;
+   bool entry_val = false, continue_val = false;
    if (!phi_has_constant_from_outside_and_one_from_inside_loop(cond_phi,
                                                                prev_block,
                                                                &entry_val,
@@ -665,7 +663,7 @@ opt_simplify_bcsel_of_phi(nir_builder *b, nir_loop *loop)
       nir_phi_instr *const cond_phi =
          nir_instr_as_phi(bcsel->src[0].src.ssa->parent_instr);
 
-      uint32_t entry_val = 0, continue_val = 0;
+      bool entry_val = false, continue_val = false;
       if (!phi_has_constant_from_outside_and_one_from_inside_loop(cond_phi,
                                                                   prev_block,
                                                                   &entry_val,