Mesa (staging/22.1): pan/mdg: Use MAX2 to set min_alignment

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed May 11 04:23:24 UTC 2022


Module: Mesa
Branch: staging/22.1
Commit: cf289ff969c538eec521406057f3e261879ca7fd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf289ff969c538eec521406057f3e261879ca7fd

Author: Icecream95 <ixn at disroot.org>
Date:   Fri Dec 10 23:44:25 2021 +1300

pan/mdg: Use MAX2 to set min_alignment

If a value is written in a vector CSEL but then written again by other
instructions, it still needs full alignment, so set min_alignment
using MAX2 to avoid ever reducing it.

Fixes: 1798f6bfc33 ("pan/midgard: Fix masks/alignment for 64-bit loads")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16382>
(cherry picked from commit b281843974aa86594288ca3c096eedf9965739f5)

---

 .pick_status.json                 |  2 +-
 src/panfrost/midgard/midgard_ra.c | 13 +++++++------
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index cf01af23d63..249fbae10f1 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -688,7 +688,7 @@
         "description": "pan/mdg: Use MAX2 to set min_alignment",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "1798f6bfc33d1d77dae1112591dce18bf7fdbc4a"
     },
diff --git a/src/panfrost/midgard/midgard_ra.c b/src/panfrost/midgard/midgard_ra.c
index e02fb743a55..e3922639432 100644
--- a/src/panfrost/midgard/midgard_ra.c
+++ b/src/panfrost/midgard/midgard_ra.c
@@ -504,7 +504,7 @@ allocate_registers(compiler_context *ctx, bool *spilled)
                                 unsigned s = ins->src[v];
 
                                 if (s < ctx->temp_count)
-                                        min_alignment[s] = 3;
+                                        min_alignment[s] = MAX2(3, min_alignment[s]);
                         }
                 }
 
@@ -514,7 +514,7 @@ allocate_registers(compiler_context *ctx, bool *spilled)
                                 unsigned size = nir_alu_type_get_type_size(ins->src_types[v]);
 
                                 if (s < ctx->temp_count)
-                                        min_alignment[s] = (size == 64) ? 3 : 2;
+                                        min_alignment[s] = MAX2((size == 64) ? 3 : 2, min_alignment[s]);
                         }
                 }
 
@@ -537,10 +537,11 @@ allocate_registers(compiler_context *ctx, bool *spilled)
                 found_class[dest] = MAX2(found_class[dest], bytes);
 
                 min_alignment[dest] =
-                        (size == 16) ? 1 : /* (1 << 1) = 2-byte */
-                        (size == 32) ? 2 : /* (1 << 2) = 4-byte */
-                        (size == 64) ? 3 : /* (1 << 3) = 8-byte */
-                        3; /* 8-bit todo */
+                        MAX2(min_alignment[dest],
+                             (size == 16) ? 1 : /* (1 << 1) = 2-byte */
+                             (size == 32) ? 2 : /* (1 << 2) = 4-byte */
+                             (size == 64) ? 3 : /* (1 << 3) = 8-byte */
+                             3); /* 8-bit todo */
 
                 /* We can't cross xy/zw boundaries. TODO: vec8 can */
                 if (size == 16 && min_alignment[dest] != 4)



More information about the mesa-commit mailing list