From 37e89e30276724932328edb7b8bf4909606052d1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Sch=C3=BCrmann?= Date: Wed, 6 May 2020 17:24:38 +0100 Subject: [PATCH] aco: either copy-propagate or inline create_vector operands Don't do both at the same time as it breaks DCE Fixes: 2dc550202e82c5da198ad0a416a5d24dd89addd8 ('aco: copy-propagate p_create_vector copies of vectors') Fixes: dEQP-VK.glsl.builtin.precision_double.ldexp.compute.scalar on GFX6-GFX7 Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_optimizer.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index 0543d38a3fa..9203f1c4b43 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -898,9 +898,12 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr& instr) switch (instr->opcode) { case aco_opcode::p_create_vector: { - bool copy_prop = instr->operands.size() == 1 && instr->operands[0].isTemp(); - if (copy_prop) + bool copy_prop = instr->operands.size() == 1 && instr->operands[0].isTemp() && + instr->operands[0].regClass() == instr->definitions[0].regClass(); + if (copy_prop) { ctx.info[instr->definitions[0].tempId()].set_temp(instr->operands[0].getTemp()); + break; + } unsigned num_ops = instr->operands.size(); for (const Operand& op : instr->operands) { @@ -928,8 +931,7 @@ 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()); + ctx.info[instr->definitions[0].tempId()].set_vec(instr.get()); break; } case aco_opcode::p_split_vector: { -- 2.30.2