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: {