From: Rhys Perry Date: Fri, 24 Apr 2020 10:58:17 +0000 (+0100) Subject: aco: fix outdated label_vec from p_create_vector labelling X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ede1c171c550a48a7957af091e7ac84e088bc6ba;p=mesa.git aco: fix outdated label_vec from p_create_vector labelling Fixes random dEQP-VK.transform_feedback.fuzz.* crashes. Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Fixes: 2dc550202e82c5da198ad0a416a5d24dd89addd8 ('aco: copy-propagate p_create_vector copies of vectors') Part-of: --- diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index 7c9eb3e1100..ac9e5ff399d 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -898,10 +898,9 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr& instr) switch (instr->opcode) { case aco_opcode::p_create_vector: { - if (instr->operands.size() == 1 && instr->operands[0].isTemp()) + bool copy_prop = instr->operands.size() == 1 && instr->operands[0].isTemp(); + if (copy_prop) ctx.info[instr->definitions[0].tempId()].set_temp(instr->operands[0].getTemp()); - else - ctx.info[instr->definitions[0].tempId()].set_vec(instr.get()); unsigned num_ops = instr->operands.size(); for (const Operand& op : instr->operands) { @@ -928,6 +927,9 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr& instr) } assert(k == num_ops); } + + if (!copy_prop) + ctx.info[instr->definitions[0].tempId()].set_vec(instr.get()); break; } case aco_opcode::p_split_vector: {