aco: copy abs/neg with assignment

Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21766>
This commit is contained in:
Georg Lehmann 2023-03-07 13:53:07 +01:00 committed by Marge Bot
parent 5fdbc4a23e
commit 60cd3ba39f
3 changed files with 11 additions and 19 deletions

View file

@ -304,8 +304,8 @@ convert_to_SDWA(amd_gfx_level gfx_level, aco_ptr<Instruction>& instr)
if (tmp->isVOP3()) { if (tmp->isVOP3()) {
VALU_instruction& vop3 = tmp->valu(); VALU_instruction& vop3 = tmp->valu();
std::copy(std::cbegin(vop3.neg), std::cend(vop3.neg), std::begin(sdwa.neg)); sdwa.neg = vop3.neg;
std::copy(std::cbegin(vop3.abs), std::cend(vop3.abs), std::begin(sdwa.abs)); sdwa.abs = vop3.neg;
sdwa.omod = vop3.omod; sdwa.omod = vop3.omod;
sdwa.clamp = vop3.clamp; sdwa.clamp = vop3.clamp;
} }
@ -406,8 +406,8 @@ convert_to_DPP(aco_ptr<Instruction>& instr, bool dpp8)
if (tmp->isVOP3()) { if (tmp->isVOP3()) {
const VALU_instruction* vop3 = &tmp->valu(); const VALU_instruction* vop3 = &tmp->valu();
std::copy(std::cbegin(vop3->neg), std::cend(vop3->neg), std::begin(dpp->neg)); dpp->neg = vop3->neg;
std::copy(std::cbegin(vop3->abs), std::cend(vop3->abs), std::begin(dpp->abs)); dpp->abs = vop3->abs;
} }
} }

View file

@ -1894,8 +1894,7 @@ label_instruction(opt_ctx& ctx, aco_ptr<Instruction>& instr)
case aco_opcode::v_med3_f16: case aco_opcode::v_med3_f16:
case aco_opcode::v_med3_f32: { /* clamp */ case aco_opcode::v_med3_f32: { /* clamp */
VALU_instruction& vop3 = instr->valu(); VALU_instruction& vop3 = instr->valu();
if (vop3.abs[0] || vop3.abs[1] || vop3.abs[2] || vop3.neg[0] || vop3.neg[1] || vop3.neg[2] || if (vop3.abs != 0 || vop3.neg != 0 || vop3.omod != 0 || vop3.opsel != 0)
vop3.omod != 0 || vop3.opsel != 0)
break; break;
unsigned idx = 0; unsigned idx = 0;
@ -2343,8 +2342,8 @@ combine_comparison_ordering(opt_ctx& ctx, aco_ptr<Instruction>& instr)
VALU_instruction* new_vop3 = VALU_instruction* new_vop3 =
create_instruction<VALU_instruction>(new_op, asVOP3(Format::VOPC), 2, 1); create_instruction<VALU_instruction>(new_op, asVOP3(Format::VOPC), 2, 1);
VALU_instruction& cmp_vop3 = cmp->valu(); VALU_instruction& cmp_vop3 = cmp->valu();
std::copy(std::cbegin(cmp_vop3.neg), std::cend(cmp_vop3.neg), std::begin(new_vop3->neg)); new_vop3->neg = cmp_vop3.neg;
std::copy(std::cbegin(cmp_vop3.abs), std::cend(cmp_vop3.abs), std::begin(new_vop3->abs)); new_vop3->abs = cmp_vop3.abs;
new_vop3->clamp = cmp_vop3.clamp; new_vop3->clamp = cmp_vop3.clamp;
new_vop3->omod = cmp_vop3.omod; new_vop3->omod = cmp_vop3.omod;
new_vop3->opsel = cmp_vop3.opsel; new_vop3->opsel = cmp_vop3.opsel;
@ -2544,8 +2543,8 @@ combine_constant_comparison_ordering(opt_ctx& ctx, aco_ptr<Instruction>& instr)
VALU_instruction* new_vop3 = VALU_instruction* new_vop3 =
create_instruction<VALU_instruction>(new_op, asVOP3(Format::VOPC), 2, 1); create_instruction<VALU_instruction>(new_op, asVOP3(Format::VOPC), 2, 1);
VALU_instruction& cmp_vop3 = cmp->valu(); VALU_instruction& cmp_vop3 = cmp->valu();
std::copy(std::cbegin(cmp_vop3.neg), std::cend(cmp_vop3.neg), std::begin(new_vop3->neg)); new_vop3->neg = cmp_vop3.neg;
std::copy(std::cbegin(cmp_vop3.abs), std::cend(cmp_vop3.abs), std::begin(new_vop3->abs)); new_vop3->abs = cmp_vop3.abs;
new_vop3->clamp = cmp_vop3.clamp; new_vop3->clamp = cmp_vop3.clamp;
new_vop3->omod = cmp_vop3.omod; new_vop3->omod = cmp_vop3.omod;
new_vop3->opsel = cmp_vop3.opsel; new_vop3->opsel = cmp_vop3.opsel;

View file

@ -459,13 +459,6 @@ try_optimize_branching_sequence(ssa_elimination_ctx& ctx, Block& block, const in
if (exec_val->isSDWA()) { if (exec_val->isSDWA()) {
/* This might work but it needs testing and more code to copy the instruction. */ /* This might work but it needs testing and more code to copy the instruction. */
return; return;
} else if (!exec_val->isVOP3()) {
aco_ptr<Instruction> tmp = std::move(exec_val);
exec_val.reset(create_instruction<VALU_instruction>(
tmp->opcode, tmp->format, tmp->operands.size(), tmp->definitions.size() + 1));
std::copy(tmp->operands.cbegin(), tmp->operands.cend(), exec_val->operands.begin());
std::copy(tmp->definitions.cbegin(), tmp->definitions.cend(),
exec_val->definitions.begin());
} else { } else {
aco_ptr<Instruction> tmp = std::move(exec_val); aco_ptr<Instruction> tmp = std::move(exec_val);
exec_val.reset(create_instruction<VALU_instruction>( exec_val.reset(create_instruction<VALU_instruction>(
@ -479,8 +472,8 @@ try_optimize_branching_sequence(ssa_elimination_ctx& ctx, Block& block, const in
dst.opsel = src.opsel; dst.opsel = src.opsel;
dst.omod = src.omod; dst.omod = src.omod;
dst.clamp = src.clamp; dst.clamp = src.clamp;
std::copy(std::cbegin(src.abs), std::cend(src.abs), std::begin(dst.abs)); dst.neg = src.neg;
std::copy(std::cbegin(src.neg), std::cend(src.neg), std::begin(dst.neg)); dst.abs = src.abs;
} }
} }