aco: fix outdated label_vec from p_create_vector labelling
authorRhys Perry <pendingchaos02@gmail.com>
Fri, 24 Apr 2020 10:58:17 +0000 (11:58 +0100)
committerMarge Bot <eric+marge@anholt.net>
Fri, 24 Apr 2020 12:21:15 +0000 (12:21 +0000)
Fixes random dEQP-VK.transform_feedback.fuzz.* crashes.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Fixes: 2dc550202e82c5da198ad0a416a5d24dd89addd8
    ('aco: copy-propagate p_create_vector copies of vectors')

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4730>

src/amd/compiler/aco_optimizer.cpp

index 7c9eb3e1100d34f1e1aceadb0e7d7e113ea8b447..ac9e5ff399dcbc0dc590b58f852eb1af880f03dd 100644 (file)
@@ -898,10 +898,9 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr<Instruction>& 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<Instruction>& 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: {