Mesa (main): aco: handle read2st64/write2st64 in optimizer
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Apr 13 23:39:27 UTC 2022
Module: Mesa
Branch: main
Commit: 5aa5af7776f8a1183d69bc5252f4dda843291561
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5aa5af7776f8a1183d69bc5252f4dda843291561
Author: Rhys Perry <pendingchaos02 at gmail.com>
Date: Mon Nov 15 16:40:53 2021 +0000
aco: handle read2st64/write2st64 in optimizer
Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13778>
---
src/amd/compiler/aco_optimizer.cpp | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp
index 763bfdf3396..e2f540c94e3 100644
--- a/src/amd/compiler/aco_optimizer.cpp
+++ b/src/amd/compiler/aco_optimizer.cpp
@@ -1390,15 +1390,21 @@ label_instruction(opt_ctx& ctx, aco_ptr<Instruction>& instr)
if (instr->opcode == aco_opcode::ds_write2_b32 ||
instr->opcode == aco_opcode::ds_read2_b32 ||
instr->opcode == aco_opcode::ds_write2_b64 ||
- instr->opcode == aco_opcode::ds_read2_b64) {
- unsigned mask = (instr->opcode == aco_opcode::ds_write2_b64 ||
- instr->opcode == aco_opcode::ds_read2_b64)
- ? 0x7
- : 0x3;
- unsigned shifts = (instr->opcode == aco_opcode::ds_write2_b64 ||
- instr->opcode == aco_opcode::ds_read2_b64)
- ? 3
- : 2;
+ instr->opcode == aco_opcode::ds_read2_b64 ||
+ instr->opcode == aco_opcode::ds_write2st64_b32 ||
+ instr->opcode == aco_opcode::ds_read2st64_b32 ||
+ instr->opcode == aco_opcode::ds_write2st64_b64 ||
+ instr->opcode == aco_opcode::ds_read2st64_b64) {
+ bool is64bit = instr->opcode == aco_opcode::ds_write2_b64 ||
+ instr->opcode == aco_opcode::ds_read2_b64 ||
+ instr->opcode == aco_opcode::ds_write2st64_b64 ||
+ instr->opcode == aco_opcode::ds_read2st64_b64;
+ bool st64 = instr->opcode == aco_opcode::ds_write2st64_b32 ||
+ instr->opcode == aco_opcode::ds_read2st64_b32 ||
+ instr->opcode == aco_opcode::ds_write2st64_b64 ||
+ instr->opcode == aco_opcode::ds_read2st64_b64;
+ unsigned shifts = (is64bit ? 3 : 2) + (st64 ? 6 : 0);
+ unsigned mask = BITFIELD_MASK(shifts);
if ((offset & mask) == 0 && ds.offset0 + (offset >> shifts) <= 255 &&
ds.offset1 + (offset >> shifts) <= 255) {
More information about the mesa-commit
mailing list