From 172c1ab9847a8e65d2109084524e7e27e7f76749 Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Mon, 6 Jan 2025 20:51:32 -0800 Subject: [PATCH] intel/elk: Add ELK_MAX_MRF_ALL for static allocating arrays Replace usage of variable length arrays. Reviewed-by: Kenneth Graunke Reviewed-by: Antonio Ospite Reviewed-by: Kenneth Graunke Part-of: --- src/intel/compiler/elk/elk_fs.cpp | 12 ++++++------ src/intel/compiler/elk/elk_fs_reg_allocate.cpp | 3 ++- src/intel/compiler/elk/elk_reg.h | 1 + src/intel/compiler/elk/elk_schedule_instructions.cpp | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/intel/compiler/elk/elk_fs.cpp b/src/intel/compiler/elk/elk_fs.cpp index 598ee12c9cb..8a931c3ac2d 100644 --- a/src/intel/compiler/elk/elk_fs.cpp +++ b/src/intel/compiler/elk/elk_fs.cpp @@ -3022,7 +3022,7 @@ elk_fs_visitor::emit_repclear_shader() bool elk_fs_visitor::remove_duplicate_mrf_writes() { - elk_fs_inst *last_mrf_move[ELK_MAX_MRF(devinfo->ver)]; + elk_fs_inst *last_mrf_move[ELK_MAX_MRF_ALL]; bool progress = false; /* Need to update the MRF tracking for compressed instructions. */ @@ -3067,7 +3067,7 @@ elk_fs_visitor::remove_duplicate_mrf_writes() } /* Clear out any MRF move records whose sources got overwritten. */ - for (unsigned i = 0; i < ARRAY_SIZE(last_mrf_move); i++) { + for (unsigned i = 0; i < ELK_MAX_MRF(devinfo->ver); i++) { if (last_mrf_move[i] && regions_overlap(inst->dst, inst->size_written, last_mrf_move[i]->src[0], @@ -3182,8 +3182,8 @@ elk_fs_visitor::insert_gfx4_pre_send_dependency_workarounds(elk_bblock_t *block, { int write_len = regs_written(inst); int first_write_grf = inst->dst.nr; - bool needs_dep[ELK_MAX_MRF(devinfo->ver)]; - assert(write_len < (int)sizeof(needs_dep) - 1); + bool needs_dep[ELK_MAX_MRF_ALL]; + assert(write_len < ELK_MAX_MRF(devinfo->ver) - 1); memset(needs_dep, false, sizeof(needs_dep)); memset(needs_dep, true, write_len); @@ -3253,8 +3253,8 @@ elk_fs_visitor::insert_gfx4_post_send_dependency_workarounds(elk_bblock_t *block { int write_len = regs_written(inst); unsigned first_write_grf = inst->dst.nr; - bool needs_dep[ELK_MAX_MRF(devinfo->ver)]; - assert(write_len < (int)sizeof(needs_dep) - 1); + bool needs_dep[ELK_MAX_MRF_ALL]; + assert(write_len < ELK_MAX_MRF(devinfo->ver) - 1); memset(needs_dep, false, sizeof(needs_dep)); memset(needs_dep, true, write_len); diff --git a/src/intel/compiler/elk/elk_fs_reg_allocate.cpp b/src/intel/compiler/elk/elk_fs_reg_allocate.cpp index 663eeedaf6a..86f812ed44c 100644 --- a/src/intel/compiler/elk/elk_fs_reg_allocate.cpp +++ b/src/intel/compiler/elk/elk_fs_reg_allocate.cpp @@ -983,7 +983,8 @@ elk_fs_reg_alloc::spill_reg(unsigned spill_reg) * SIMD16 mode, because we'd stomp the FB writes. */ if (!fs->spilled_any_registers) { - bool mrf_used[ELK_MAX_MRF(devinfo->ver)]; + bool mrf_used[ELK_MAX_MRF_ALL]; + assert(ARRAY_SIZE(mrf_used) <= ELK_MAX_MRF(devinfo->ver)); get_used_mrfs(fs, mrf_used); for (int i = spill_base_mrf(fs); i < ELK_MAX_MRF(devinfo->ver); i++) { diff --git a/src/intel/compiler/elk/elk_reg.h b/src/intel/compiler/elk/elk_reg.h index 611ae613af2..a1c72ec6170 100644 --- a/src/intel/compiler/elk/elk_reg.h +++ b/src/intel/compiler/elk/elk_reg.h @@ -82,6 +82,7 @@ struct intel_device_info; /** Number of message register file registers */ #define ELK_MAX_MRF(gen) (gen == 6 ? 24 : 16) +#define ELK_MAX_MRF_ALL 24 #define ELK_SWIZZLE4(a,b,c,d) (((a)<<0) | ((b)<<2) | ((c)<<4) | ((d)<<6)) #define ELK_GET_SWZ(swz, idx) (((swz) >> ((idx)*2)) & 0x3) diff --git a/src/intel/compiler/elk/elk_schedule_instructions.cpp b/src/intel/compiler/elk/elk_schedule_instructions.cpp index 7ab81c3877a..e1e514f583c 100644 --- a/src/intel/compiler/elk/elk_schedule_instructions.cpp +++ b/src/intel/compiler/elk/elk_schedule_instructions.cpp @@ -1203,7 +1203,7 @@ elk_fs_instruction_scheduler::calculate_deps() * After register allocation, reg_offsets are gone and we track individual * GRF registers. */ - elk_schedule_node *last_mrf_write[ELK_MAX_MRF(v->devinfo->ver)]; + elk_schedule_node *last_mrf_write[ELK_MAX_MRF_ALL]; elk_schedule_node *last_conditional_mod[8] = {}; elk_schedule_node *last_accumulator_write = NULL; /* Fixed HW registers are assumed to be separate from the virtual @@ -1470,7 +1470,7 @@ elk_fs_instruction_scheduler::calculate_deps() void elk_vec4_instruction_scheduler::calculate_deps() { - elk_schedule_node *last_mrf_write[ELK_MAX_MRF(v->devinfo->ver)]; + elk_schedule_node *last_mrf_write[ELK_MAX_MRF_ALL]; elk_schedule_node *last_conditional_mod = NULL; elk_schedule_node *last_accumulator_write = NULL; /* Fixed HW registers are assumed to be separate from the virtual