diff --git a/.pick_status.json b/.pick_status.json index c99f72042b0..78efbeacb2e 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3504,7 +3504,7 @@ "description": "brw: fix analysis dirtying with pulled constants", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "5c1729908471a1b000fa4ab0b29ac9f79a8b7394", "notes": null diff --git a/src/intel/compiler/brw_analysis.h b/src/intel/compiler/brw_analysis.h index cf6aac18a9f..2b423edf0d4 100644 --- a/src/intel/compiler/brw_analysis.h +++ b/src/intel/compiler/brw_analysis.h @@ -82,6 +82,13 @@ operator|(brw_analysis_dependency_class x, brw_analysis_dependency_class y) static_cast(x) | static_cast(y)); } +inline brw_analysis_dependency_class +operator|=(brw_analysis_dependency_class x, brw_analysis_dependency_class y) +{ + return static_cast( + static_cast(x) | static_cast(y)); +} + /** * Instantiate a program analysis class \p L which can calculate an object of * type \p T as result. \p C is a closure that encapsulates whatever diff --git a/src/intel/compiler/brw_shader.cpp b/src/intel/compiler/brw_shader.cpp index d4b9aec396e..2c1c4f245a7 100644 --- a/src/intel/compiler/brw_shader.cpp +++ b/src/intel/compiler/brw_shader.cpp @@ -678,6 +678,8 @@ brw_shader::assign_curb_setup() brw_imm_ud(INTEL_MASK(31, 6))); } + brw_analysis_dependency_class dirty_bits = BRW_DEPENDENCY_INSTRUCTIONS; + /* On Gfx12-HP we load constants at the start of the program using A32 * stateless messages. */ @@ -691,6 +693,7 @@ brw_shader::assign_curb_setup() if (i != 0) { if (pull_constants_a64) { + dirty_bits |= BRW_DEPENDENCY_VARIABLES; /* We need to do the carry manually as when this pass is run, * we're not expecting any 64bit ALUs. Unfortunately all the * 64bit lowering is done in NIR. @@ -752,7 +755,7 @@ brw_shader::assign_curb_setup() i += num_regs; } - invalidate_analysis(BRW_DEPENDENCY_INSTRUCTIONS); + invalidate_analysis(dirty_bits); } /* Map the offsets in the UNIFORM file to fixed HW regs. */