nir/divergence: improve DA of shuffle

If the data is uniform, then it's really a uniform copy. If the index is
uniform, then it's really a read_invocation.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
This commit is contained in:
Rhys Perry 2019-11-12 15:29:45 +00:00
parent f97d933426
commit c877f4d320

View file

@ -200,7 +200,6 @@ visit_intrinsic(bool *divergent, nir_intrinsic_instr *instr,
case nir_intrinsic_ballot_find_lsb:
case nir_intrinsic_ballot_find_msb:
case nir_intrinsic_ballot_bit_count_reduce:
case nir_intrinsic_shuffle:
case nir_intrinsic_shuffle_xor:
case nir_intrinsic_shuffle_up:
case nir_intrinsic_shuffle_down:
@ -247,6 +246,11 @@ visit_intrinsic(bool *divergent, nir_intrinsic_instr *instr,
break;
}
case nir_intrinsic_shuffle:
is_divergent = divergent[instr->src[0].ssa->index] &&
divergent[instr->src[1].ssa->index];
break;
/* Intrinsics which are always divergent */
case nir_intrinsic_load_color0:
case nir_intrinsic_load_color1: