nir/split_per_member_structs: Inline split_variables_in_list
authorJason Ekstrand <jason@jlekstrand.net>
Tue, 21 Jul 2020 16:32:38 +0000 (11:32 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 29 Jul 2020 17:38:58 +0000 (17:38 +0000)
This lets us do one list walk instead of three.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5966>

src/compiler/nir/nir_split_per_member_structs.c

index 16cf1f234836095674dd6cc7236e0a1a153debba..6c9b314002e7f42551323604dbd84a5a5c816ee5 100644 (file)
@@ -103,24 +103,6 @@ split_variable(struct nir_variable *var, nir_shader *shader,
    _mesa_hash_table_insert(var_to_member_map, var, members);
 }
 
-static bool
-split_variables_in_list(nir_shader *shader, nir_variable_mode mode,
-                        struct hash_table *var_to_member_map, void *dead_ctx)
-{
-   bool progress = false;
-
-   nir_foreach_variable_with_modes_safe(var, shader, mode) {
-      if (var->num_members == 0)
-         continue;
-
-      split_variable(var, shader, var_to_member_map, dead_ctx);
-      exec_node_remove(&var->node);
-      progress = true;
-   }
-
-   return progress;
-}
-
 static nir_deref_instr *
 build_member_deref(nir_builder *b, nir_deref_instr *deref, nir_variable *member)
 {
@@ -177,12 +159,17 @@ nir_split_per_member_structs(nir_shader *shader)
    struct hash_table *var_to_member_map =
       _mesa_pointer_hash_table_create(dead_ctx);
 
-   progress |= split_variables_in_list(shader, nir_var_shader_in,
-                                       var_to_member_map, dead_ctx);
-   progress |= split_variables_in_list(shader, nir_var_shader_out,
-                                       var_to_member_map, dead_ctx);
-   progress |= split_variables_in_list(shader, nir_var_system_value,
-                                       var_to_member_map, dead_ctx);
+   nir_foreach_variable_with_modes_safe(var, shader, nir_var_shader_in |
+                                                     nir_var_shader_out |
+                                                     nir_var_system_value) {
+      if (var->num_members == 0)
+         continue;
+
+      split_variable(var, shader, var_to_member_map, dead_ctx);
+      exec_node_remove(&var->node);
+      progress = true;
+   }
+
    if (!progress) {
       ralloc_free(dead_ctx);
       return false;