mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 00:38:48 +02:00
intel/fs: Fix src and dst types of LOAD_PAYLOAD ACP entries during copy propagation.
The ACP entries created by copy propagation to track the implied copies of LOAD_PAYLOAD instructions don't model the behavior of LOAD_PAYLOAD correctly, since (as of41868bb682) header moves are implicitly retyped to UD and the destination of non-header copies implicitly uses the same type as the corresponding source, even though the ACP entries created for such copies could incorrectly represent a type conversion, which can lead to mis-optimization of the program. According to Marcin, this fixes the func.mesh.ext.workgroup_id.task.q0 crucible test. Fixes:41868bb682("i965/fs: Rework the fs_visitor LOAD_PAYLOAD instruction") Reported-by: Marcin Ślusarz <marcin.slusarz@intel.com> Tested-by: Marcin Ślusarz <marcin.slusarz@intel.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18980> (cherry picked from commit7b5e933629)
This commit is contained in:
parent
67f2d07eff
commit
8f0b387d94
2 changed files with 5 additions and 3 deletions
|
|
@ -265,7 +265,7 @@
|
|||
"description": "intel/fs: Fix src and dst types of LOAD_PAYLOAD ACP entries during copy propagation.",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "41868bb6824c6106a55c8442006c1e2215abf567"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1085,9 +1085,11 @@ fs_visitor::opt_copy_propagation_local(void *copy_prop_ctx, bblock_t *block,
|
|||
if (inst->src[i].file == VGRF ||
|
||||
(inst->src[i].file == FIXED_GRF &&
|
||||
inst->src[i].is_contiguous())) {
|
||||
const brw_reg_type t = i < inst->header_size ?
|
||||
BRW_REGISTER_TYPE_UD : inst->src[i].type;
|
||||
acp_entry *entry = rzalloc(copy_prop_ctx, acp_entry);
|
||||
entry->dst = byte_offset(inst->dst, offset);
|
||||
entry->src = inst->src[i];
|
||||
entry->dst = byte_offset(retype(inst->dst, t), offset);
|
||||
entry->src = retype(inst->src[i], t);
|
||||
entry->size_written = size_written;
|
||||
entry->size_read = inst->size_read(i);
|
||||
entry->opcode = inst->opcode;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue