aco: fix image_atomic_cmp_swap

Fixes: 71440ba0f5 ('aco: reorder VMEM operands in ACO IR')
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3652>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3652>
This commit is contained in:
Daniel Schürmann 2020-01-31 10:41:39 +01:00 committed by Marge Bot
parent 0d14f41625
commit 3b323d6601
2 changed files with 3 additions and 2 deletions

View file

@ -1547,7 +1547,7 @@ void register_allocation(Program *program, std::vector<std::set<Temp>> live_out_
instr->definitions[0].setFixed(instr->operands[3].physReg());
} else if (instr->format == Format::MIMG &&
instr->definitions.size() == 1 &&
instr->operands[1].regClass() == instr->definitions[0].regClass()) {
instr->operands[1].regClass().type() == RegType::vgpr) {
instr->definitions[0].setFixed(instr->operands[1].physReg());
}

View file

@ -244,7 +244,8 @@ void validate(Program* program, FILE * output)
if (instr->operands[1].hasRegClass() && instr->operands[1].regClass().type() == RegType::sgpr)
check(instr->operands[1].regClass() == s4, "MIMG operands[1] (sampler constant) must be 4 SGPRs", instr.get());
else if (instr->operands[1].hasRegClass() && instr->operands[1].regClass().type() == RegType::vgpr)
check(instr->definitions.empty() || instr->definitions[0].regClass() == instr->operands[1].regClass(),
check((instr->definitions.empty() || instr->definitions[0].regClass() == instr->operands[1].regClass() ||
instr->opcode == aco_opcode::image_atomic_cmpswap || instr->opcode == aco_opcode::image_atomic_fcmpswap),
"MIMG operands[1] (VDATA) must be the same as definitions[0] for atomics", instr.get());
check(instr->operands[2].hasRegClass() && instr->operands[2].regClass().type() == RegType::vgpr,
"MIMG operands[2] (VADDR) must be VGPR", instr.get());