Module: Mesa Branch: staging/22.1 Commit: cf289ff969c538eec521406057f3e261879ca7fd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf289ff969c538eec521406057f3e261879ca7fd
Author: Icecream95 <[email protected]> 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)
