From 8b6d22109f452b05ab1ce2028f7e18e50edcf325 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 17 Mar 2021 21:30:52 +0200 Subject: [PATCH] intel/fs/vec4: add missing dependency in write-on-write fixed GRFs If we load constant data using pull constant SENDS, and we later load that register with some other data, we can end up in a situation where we don't track the initial fixed register write and therefore end up using uninitialized registers. This tracks write-on-write of fixed GRFs like we do for normal virtual GRFs. v2: Fix post_alloc_reg case (Jason) Signed-off-by: Lionel Landwerlin Cc: Reviewed-by: Francisco Jerez Reviewed-by: Jason Ekstrand Part-of: --- src/intel/compiler/brw_schedule_instructions.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/intel/compiler/brw_schedule_instructions.cpp b/src/intel/compiler/brw_schedule_instructions.cpp index e516af5043d..d848f0b15b2 100644 --- a/src/intel/compiler/brw_schedule_instructions.cpp +++ b/src/intel/compiler/brw_schedule_instructions.cpp @@ -1198,9 +1198,12 @@ fs_instruction_scheduler::calculate_deps() } } else if (inst->dst.file == FIXED_GRF) { if (post_reg_alloc) { - for (unsigned r = 0; r < regs_written(inst); r++) + for (unsigned r = 0; r < regs_written(inst); r++) { + add_dep(last_grf_write[inst->dst.nr + r], n); last_grf_write[inst->dst.nr + r] = n; + } } else { + add_dep(last_fixed_grf_write, n); last_fixed_grf_write = n; } } else if (inst->dst.is_accumulator()) { @@ -1428,6 +1431,7 @@ vec4_instruction_scheduler::calculate_deps() add_dep(last_mrf_write[inst->dst.nr], n); last_mrf_write[inst->dst.nr] = n; } else if (inst->dst.file == FIXED_GRF) { + add_dep(last_fixed_grf_write, n); last_fixed_grf_write = n; } else if (inst->dst.is_accumulator()) { add_dep(last_accumulator_write, n);