From ef204ae80a8c2c7994e65716d0b28c717db1d54e Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Wed, 9 Nov 2022 12:23:53 -0800 Subject: [PATCH] ir3/ra: Make sure we don't pick a preferred reg overflowing the file. If we're in handle_collect()'s dst allocation and are part of a merge set near the end of the file, our check for reg_elem_size(reg) would let us use the preferred reg when that would immediately lead to allocate_dst_fixed() creating an interval extending thruogh reg_size(reg) that overflows the file. Avoids a regression on gfxbench5/gl_5_high_off/17.shader_test in the next commit. No change on shader-db. Cc: mesa-stable Part-of: (cherry picked from commit a39113b616099a7bcce9e62337731f040c7cad64) --- .pick_status.json | 2 +- src/freedreno/ir3/ir3_ra.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index fab38d721a9..b4fb9752382 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1300,7 +1300,7 @@ "description": "ir3/ra: Make sure we don't pick a preferred reg overflowing the file.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/freedreno/ir3/ir3_ra.c b/src/freedreno/ir3/ir3_ra.c index 871673472fd..a011c8f5a3e 100644 --- a/src/freedreno/ir3/ir3_ra.c +++ b/src/freedreno/ir3/ir3_ra.c @@ -1374,7 +1374,7 @@ get_reg(struct ra_ctx *ctx, struct ra_file *file, struct ir3_register *reg) if (reg->merge_set && reg->merge_set->preferred_reg != (physreg_t)~0) { physreg_t preferred_reg = reg->merge_set->preferred_reg + reg->merge_set_offset; - if (preferred_reg < file_size && + if (preferred_reg + reg_size(reg) <= file_size && preferred_reg % reg_elem_size(reg) == 0 && get_reg_specified(ctx, file, reg, preferred_reg, false)) return preferred_reg;