diff --git a/.pick_status.json b/.pick_status.json index 1fef0a9ea28..bdafcc265b0 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -40,7 +40,7 @@ "description": "aco/ra: use get_reg_specified() for p_extract_vector", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "51f4b22feec3720c89458094a3245efc984115ee" }, diff --git a/src/amd/compiler/aco_register_allocation.cpp b/src/amd/compiler/aco_register_allocation.cpp index 736f5af84e5..e85a3c810b0 100644 --- a/src/amd/compiler/aco_register_allocation.cpp +++ b/src/amd/compiler/aco_register_allocation.cpp @@ -2201,14 +2201,10 @@ void register_allocation(Program *program, std::vector& live_out_per_bl !register_file.test(reg, definition->bytes())) definition->setFixed(reg); } else if (instr->opcode == aco_opcode::p_extract_vector) { - PhysReg reg; - if (instr->operands[0].isKillBeforeDef() && - instr->operands[0].getTemp().type() == definition->getTemp().type()) { - reg = instr->operands[0].physReg(); - reg.reg_b += definition->bytes() * instr->operands[1].constantValue(); - assert(!register_file.test(reg, definition->bytes())); + PhysReg reg = instr->operands[0].physReg(); + reg.reg_b += definition->bytes() * instr->operands[1].constantValue(); + if (get_reg_specified(ctx, register_file, definition->regClass(), parallelcopy, instr, reg)) definition->setFixed(reg); - } } else if (instr->opcode == aco_opcode::p_create_vector) { PhysReg reg = get_reg_create_vector(ctx, register_file, definition->getTemp(), parallelcopy, instr);