Module: Mesa Branch: staging/22.1 Commit: 7c24f4fbc9148a3810d48cadcd99d3c69992408f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7c24f4fbc9148a3810d48cadcd99d3c69992408f
Author: Icecream95 <[email protected]> Date: Fri Dec 10 23:50:00 2021 +1300 pan/mdg: Return the instruction from mir_insert_instruction_*_scheduled We can't return a pointer to the bundle itself because it might move about in memory. CC: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16382> (cherry picked from commit 7b9c976c2dabf07050efb1c9d0deb82d57efa944) --- .pick_status.json | 2 +- src/panfrost/midgard/compiler.h | 4 ++-- src/panfrost/midgard/mir.c | 8 ++++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 0237064317f..2ad46bb2382 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -661,7 +661,7 @@ "description": "pan/mdg: Return the instruction from mir_insert_instruction_*_scheduled", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h index 5847889259e..934d505dcdc 100644 --- a/src/panfrost/midgard/compiler.h +++ b/src/panfrost/midgard/compiler.h @@ -516,8 +516,8 @@ void mir_print_shader(compiler_context *ctx); bool mir_nontrivial_mod(midgard_instruction *ins, unsigned i, bool check_swizzle); bool mir_nontrivial_outmod(midgard_instruction *ins); -void mir_insert_instruction_before_scheduled(compiler_context *ctx, midgard_block *block, midgard_instruction *tag, midgard_instruction ins); -void mir_insert_instruction_after_scheduled(compiler_context *ctx, midgard_block *block, midgard_instruction *tag, midgard_instruction ins); +midgard_instruction *mir_insert_instruction_before_scheduled(compiler_context *ctx, midgard_block *block, midgard_instruction *tag, midgard_instruction ins); +midgard_instruction *mir_insert_instruction_after_scheduled(compiler_context *ctx, midgard_block *block, midgard_instruction *tag, midgard_instruction ins); void mir_flip(midgard_instruction *ins); void mir_compute_temp_count(compiler_context *ctx); diff --git a/src/panfrost/midgard/mir.c b/src/panfrost/midgard/mir.c index 5d76af80ed8..5ff9469bcff 100644 --- a/src/panfrost/midgard/mir.c +++ b/src/panfrost/midgard/mir.c @@ -378,7 +378,7 @@ mir_bundle_idx_for_ins(midgard_instruction *tag, midgard_block *block) unreachable("Instruction not scheduled in block"); } -void +midgard_instruction * mir_insert_instruction_before_scheduled( compiler_context *ctx, midgard_block *block, @@ -398,9 +398,11 @@ mir_insert_instruction_before_scheduled( list_addtail(&new.instructions[0]->link, &before_bundle->instructions[0]->link); block->quadword_count += midgard_tag_props[new.tag].size; + + return new.instructions[0]; } -void +midgard_instruction * mir_insert_instruction_after_scheduled( compiler_context *ctx, midgard_block *block, @@ -423,6 +425,8 @@ mir_insert_instruction_after_scheduled( memcpy(bundles + after + 1, &new, sizeof(new)); list_add(&new.instructions[0]->link, &after_bundle->instructions[after_bundle->instruction_count - 1]->link); block->quadword_count += midgard_tag_props[new.tag].size; + + return new.instructions[0]; } /* Flip the first-two arguments of a (binary) op. Currently ALU
