diff --git a/src/compiler/nir/nir_opt_uniform_subgroup.c b/src/compiler/nir/nir_opt_uniform_subgroup.c index 3f13d0e878d..d39bb496558 100644 --- a/src/compiler/nir/nir_opt_uniform_subgroup.c +++ b/src/compiler/nir/nir_opt_uniform_subgroup.c @@ -323,6 +323,12 @@ opt_uniform_subgroup_instr(nir_builder *b, nir_intrinsic_instr *intrin, void *_s return false; } + + /* Divergence shouldn't change from the optimization that we have done, + * so preserve it in case another subgroup operation uses the result. + */ + replacement->divergent = intrin->def.divergent; + nir_def_replace(&intrin->def, replacement); return true; }