From 5664713d7b99b99dcee1d009ef6e5b105a2d65ee Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 29 Sep 2020 10:30:52 -0500 Subject: [PATCH] nir: Handle incomplete derefs in split_struct_vars In split_var_list_structs where we initalize the splitting, we already use get_complex_used_vars to avoid splitting any variables that have a complex use. However, we weren't actually handling the complex uses properly in the case where we can't actually find the variable. Fixes: f1cb3348f1 "nir/split_vars: Properly bail in the presence of ..." Reviewed-by: Jesse Natalie Part-of: --- src/compiler/nir/nir_split_vars.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/compiler/nir/nir_split_vars.c b/src/compiler/nir/nir_split_vars.c index 6aee3109d41..3a4513077e9 100644 --- a/src/compiler/nir/nir_split_vars.c +++ b/src/compiler/nir/nir_split_vars.c @@ -232,6 +232,14 @@ split_struct_derefs_impl(nir_function_impl *impl, continue; nir_variable *base_var = nir_deref_instr_get_variable(deref); + /* If we can't chase back to the variable, then we're a complex use. + * This should have been detected by get_complex_used_vars() and the + * variable should not have been split. However, we have no way of + * knowing that here, so we just have to trust it. + */ + if (base_var == NULL) + continue; + struct hash_entry *entry = _mesa_hash_table_search(var_field_map, base_var); if (!entry)