mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 05:18:08 +02:00
aco: Optimize MUBUF 0 offset when idxen is also being used.
Now that we added an index src to the NIR intrinsic, it can happen that these generate MUBUF instructions which have both an index and an offset. Extend this ACO optimization to the case when idxen is used. Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Georg Lehmann <dadschoorse@gmail.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17551>
This commit is contained in:
parent
e52c2f4fca
commit
dd90273aaa
1 changed files with 10 additions and 2 deletions
|
|
@ -1424,8 +1424,16 @@ label_instruction(opt_ctx& ctx, aco_ptr<Instruction>& instr)
|
|||
* MUBUF accesses. */
|
||||
bool vaddr_prevent_overflow = mubuf.swizzled && ctx.program->gfx_level < GFX9;
|
||||
|
||||
if (mubuf.offen && i == 1 && info.is_constant_or_literal(32) &&
|
||||
mubuf.offset + info.val < 4096) {
|
||||
if (mubuf.offen && mubuf.idxen && i == 1 && info.is_vec() &&
|
||||
info.instr->operands.size() == 2 && info.instr->operands[0].isTemp() &&
|
||||
info.instr->operands[0].regClass() == v1 && info.instr->operands[1].isConstant() &&
|
||||
mubuf.offset + info.instr->operands[1].constantValue() < 4096) {
|
||||
instr->operands[1] = info.instr->operands[0];
|
||||
mubuf.offset += info.instr->operands[1].constantValue();
|
||||
mubuf.offen = false;
|
||||
continue;
|
||||
} else if (mubuf.offen && i == 1 && info.is_constant_or_literal(32) &&
|
||||
mubuf.offset + info.val < 4096) {
|
||||
assert(!mubuf.idxen);
|
||||
instr->operands[1] = Operand(v1);
|
||||
mubuf.offset += info.val;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue