From 7b9c976c2dabf07050efb1c9d0deb82d57efa944 Mon Sep 17 00:00:00 2001 From: Icecream95 Date: Fri, 10 Dec 2021 23:50:00 +1300 Subject: [PATCH] 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: --- src/panfrost/midgard/compiler.h | 4 ++-- src/panfrost/midgard/mir.c | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h index 5847889..934d505 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 5d76af8..5ff9469 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 -- 2.7.4