From 8564e7da3696145e1f6c898652e74846d2df5624 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: (cherry picked from commit 5664713d7b99b99dcee1d009ef6e5b105a2d65ee) --- .pick_status.json | 2 +- src/compiler/nir/nir_split_vars.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 9205e3927a9..57773eab751 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4711,7 +4711,7 @@ "description": "nir: Handle incomplete derefs in split_struct_vars", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "f1cb3348f18a9b679925ee537091e52749e9f6da" }, 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)