Mesa (staging/21.0): aco/optimizer: don't propagate subdword temps of different size

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 26 17:20:07 UTC 2021


Module: Mesa
Branch: staging/21.0
Commit: 215266234b56498c77b813513f3736928630f749
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=215266234b56498c77b813513f3736928630f749

Author: Daniel Schürmann <daniel at schuermann.dev>
Date:   Mon Dec 28 19:15:17 2020 +0000

aco/optimizer: don't propagate subdword temps of different size

It could happen that due to inconsistent copy-propagation

  v1 = p_parallelcopy v2b

instructions were left after optimization on GFX8.

Cc: 20.3
Cc: 21.0

Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8260>
(cherry picked from commit 856fd4750daf23ac3f8f40278cf685f36661c19f)

---

 .pick_status.json                  | 2 +-
 src/amd/compiler/aco_optimizer.cpp | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index cfe18fc5f75..f1e9cb540de 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -2497,7 +2497,7 @@
         "description": "aco/optimizer: don't propagate subdword temps of different size",
         "nominated": false,
         "nomination_type": null,
-        "resolution": 4,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp
index 646f06e9793..7258f3a793d 100644
--- a/src/amd/compiler/aco_optimizer.cpp
+++ b/src/amd/compiler/aco_optimizer.cpp
@@ -860,7 +860,8 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr<Instruction>& instr)
          if (info.is_temp() && info.temp.type() == RegType::sgpr) {
             instr->operands[i].setTemp(info.temp);
             info = ctx.info[info.temp.id()];
-         } else if (info.is_temp() && info.temp.type() == RegType::vgpr) {
+         } else if (info.is_temp() && info.temp.type() == RegType::vgpr &&
+                    info.temp.bytes() == instr->operands[i].bytes()) {
             /* propagate vgpr if it can take it */
             switch (instr->opcode) {
             case aco_opcode::p_create_vector:



More information about the mesa-commit mailing list