summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2016-12-16 10:17:33 +1100
committerTimothy Arceri <[email protected]>2016-12-16 20:32:59 +1100
commit3421b3f5a35f5cf29934f74c30850c4d04ba0237 (patch)
tree6a40ba34692b8b69cd4724b00e1e4ae1e2fdaa3f
parent08fc74663bea34d61761b02b6194cdef686baefe (diff)
nir: Turn imov/fmov of undef into undef
Reverting the previous attempt at this a5502a721fd30fd resulted in the following Vulkan test failing. dEQP-VK.glsl.return.return_in_dynamic_loop_dynamic_vertex This time we use the num_components from the alu dest rather than num_inputs to the op to determine the size of the undef. Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Cc: "13.0" <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99100
-rw-r--r--src/compiler/nir/nir_opt_undef.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/compiler/nir/nir_opt_undef.c b/src/compiler/nir/nir_opt_undef.c
index c4777a86c8f..8d3210c637e 100644
--- a/src/compiler/nir/nir_opt_undef.c
+++ b/src/compiler/nir/nir_opt_undef.c
@@ -79,22 +79,22 @@ opt_undef_vecN(nir_builder *b, nir_alu_instr *alu)
{
if (alu->op != nir_op_vec2 &&
alu->op != nir_op_vec3 &&
- alu->op != nir_op_vec4)
+ alu->op != nir_op_vec4 &&
+ alu->op != nir_op_fmov &&
+ alu->op != nir_op_imov)
return false;
assert(alu->dest.dest.is_ssa);
- unsigned num_components = nir_op_infos[alu->op].num_inputs;
-
- for (unsigned i = 0; i < num_components; i++) {
+ for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) {
if (!alu->src[i].src.is_ssa ||
alu->src[i].src.ssa->parent_instr->type != nir_instr_type_ssa_undef)
return false;
}
b->cursor = nir_before_instr(&alu->instr);
- nir_ssa_def *undef =
- nir_ssa_undef(b, num_components, nir_dest_bit_size(alu->dest.dest));
+ nir_ssa_def *undef = nir_ssa_undef(b, alu->dest.dest.ssa.num_components,
+ nir_dest_bit_size(alu->dest.dest));
nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, nir_src_for_ssa(undef));
return true;