Skip to content
Snippets Groups Projects
Commit 9d0be7b6 authored by Ian Romanick's avatar Ian Romanick Committed by Dylan Baker
Browse files

nir/gcm: Clear out pass_flags before starting


With this pass enabled in Intel drivers, running shader-db on
shaders/unity/38.shader_test resulted in

Program received signal SIGSEGV, Segmentation fault.
gcm_schedule_early_src (src=0x555555d45348, void_state=0x7fffffffba40) at ../../SOURCE/master/src/compiler/nir/nir_opt_gcm.c:297
297	   if (info->early_block->index < src_info->early_block->index)
(gdb) print src_info->early_block
$1 = (nir_block *) 0x0

I tracked this down to an early exit from gcm_schedule_early_instr on
the parent instruction because instr->pass_flags was 0x1c.  That
should be an impossible value for this pass, so I inferred that
pass_flags must have dirt left from some previous pass.

Fixes: 8dfe6f67 ("nir/GCM: Use pass_flags instead of bitsets for tracking visited/pinned")

Reviewed-by: default avatarTimothy Arceri <tarceri@itsqueeze.com>
Part-of: <mesa/mesa!597>
(cherry picked from commit 43666887)
parent f2bdec9e
No related branches found
No related tags found
No related merge requests found
......@@ -58,7 +58,7 @@
"description": "nir/gcm: Clear out pass_flags before starting",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "8dfe6f672f4f3e226089c6cc8d392fcd39dff5cb"
},
......
......@@ -604,6 +604,11 @@ opt_gcm_impl(nir_function_impl *impl, bool value_number)
nir_metadata_require(impl, nir_metadata_block_index |
nir_metadata_dominance);
/* A previous pass may have left pass_flags dirty, so clear it all out. */
nir_foreach_block(block, impl)
nir_foreach_instr(instr, block)
instr->pass_flags = 0;
struct gcm_state state;
state.impl = impl;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment