From: Timothy Arceri Date: Thu, 15 Dec 2016 23:17:33 +0000 (+1100) Subject: nir: Turn imov/fmov of undef into undef X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3421b3f5a35f5cf29934f74c30850c4d04ba0237;p=mesa.git 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 Reviewed-by: Jason Ekstrand Cc: "13.0" Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99100 --- 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;