diff options
author | Francisco Jerez <currojerez@riseup.net> | 2022-09-27 15:28:48 -0700 |
---|---|---|
committer | Eric Engestrom <eric@engestrom.ch> | 2023-01-26 15:40:35 +0000 |
commit | 8f0b387d9444a29b9f34cd85b190ddbc38deb935 (patch) | |
tree | bbd6034bfca6690c4b814872cbe0b37b2a7a4f3f | |
parent | 67f2d07eff9c54540ca2ea769a38f31cc3c429c0 (diff) | |
download | mesa-8f0b387d9444a29b9f34cd85b190ddbc38deb935.tar.gz |
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 of 41868bb6824c6106a55c844) 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: 41868bb6824c6106a55c844 ("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 commit 7b5e9336298b00eeffeec738adbcc0acc7683868)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/intel/compiler/brw_fs_copy_propagation.cpp | 6 |
2 files changed, 5 insertions, 3 deletions
diff --git a/.pick_status.json b/.pick_status.json index 5a3d3d344ec..023ca79498b 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -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" }, diff --git a/src/intel/compiler/brw_fs_copy_propagation.cpp b/src/intel/compiler/brw_fs_copy_propagation.cpp index 9819b5dcbca..457d80f6972 100644 --- a/src/intel/compiler/brw_fs_copy_propagation.cpp +++ b/src/intel/compiler/brw_fs_copy_propagation.cpp @@ -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; |