mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 12:00:12 +01:00
aco: allow applying sign-extended sel to p_extract more often
In the case of v1=p_extract(v1=p_extract(src, 0, 16, 1), 0, 32, 0). When we apply extracts with sub-dword definitions, this will also include v2b=p_extract(v2b=p_extract(src, 0, 8, 1), 0, 16, 0). No fossil-db changes. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Georg Lehmann <dadschoorse@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31762>
This commit is contained in:
parent
e47bc3e750
commit
05d0fa894e
1 changed files with 4 additions and 2 deletions
|
|
@ -1068,7 +1068,9 @@ can_apply_extract(opt_ctx& ctx, aco_ptr<Instruction>& instr, unsigned idx, ssa_i
|
|||
return false;
|
||||
|
||||
/* don't remove the sign-extension when increasing the size further */
|
||||
if (instrSel.size() > sel.size() && !instrSel.sign_extend() && sel.sign_extend())
|
||||
if (instrSel.size() > sel.size() && sel.sign_extend() &&
|
||||
!(instrSel.sign_extend() || (instrSel.size() == instr->operands[idx].bytes() &&
|
||||
instrSel.size() == instr->definitions[0].bytes())))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
@ -1149,7 +1151,7 @@ apply_extract(opt_ctx& ctx, aco_ptr<Instruction>& instr, unsigned idx, ssa_info&
|
|||
unsigned size = std::min(sel.size(), instrSel.size());
|
||||
unsigned offset = sel.offset() + instrSel.offset();
|
||||
unsigned sign_extend =
|
||||
instrSel.sign_extend() && (sel.sign_extend() || instrSel.size() <= sel.size());
|
||||
instrSel.size() <= sel.size() ? instrSel.sign_extend() : sel.sign_extend();
|
||||
|
||||
instr->operands[1] = Operand::c32(offset / size);
|
||||
instr->operands[2] = Operand::c32(size * 8u);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue